2017-05-06 1 views
0

Comment puis-je mettre à jour les éléments avec AWS SDK pour C#? Disons que je veux mettre à jour la valeur "Selected" à "TRUE" lorsque ItemName est égal à "eqq".Comment mettre à jour un élément dans une liste dans DynamoDB?

J'ai écrit ce code sans succès:

request = { 
    ExpressionAttributeNames = new Dictionary<string, string>() 
    { 
     {"#I", "Items"}, 
     {"#lN", item.ItemName} 
    }, 
    ExpressionAttributeValues = new Dictionary<string, AttributeValue>() 
    { 
     { ":item", new AttributeValue 
      { L = new List<AttributeValue> { 
       { new AttributeValue 
        { M = new Dictionary<string,AttributeValue> { 
         { "ListName", new AttributeValue { S = "item.ItemName"} }, 
         { "Selected", new AttributeValue { BOOL = item.Selected} }, 
         { "ImageSource", new AttributeValue { S = item.ImageSource} } 
        }} 
       } 
      }} 
     } 
    }, 
    UpdateExpression = "SET #I.#lN = :item" 
    // UpdateExpression = "SET #I = list_append(:item,#I)" 
    // UpdateExpression = "SET #I = :item" 
}; 
var response = await client.UpdateItemAsync(request); 

Mes données JSON dans le tableau DynamoDB suit la structure ci-dessous:

{ 
    "Items": [ 
     { 
      "ImageSource": "checked.png", 
      "ItemName": "egg", 
      "Selected": true 
     }, 
     { 
      "ImageSource": "checked.png", 
      "ItemName": "Water", 
      "Selected": true 
     } 
    ], 
    "ListCategory": "Technology", 
    "ListCreator": "John", 
    "ListId": "e5a7ec9d-b00c-41f3-958a-84c8c183d702", 
    "ListName": "Test5", 
    "UpdateDateTıme": "2017-05-05T21:48:41.833Z" 
} 

Répondre

1

Vous ne pouvez pas savoir a priori quel élément dans la liste contient l'œuf ItemName. Vous pourriez lire l'article et ensuite conditionner sur le 0ème article dans la liste d'articles ayant un ItemName = oeuf. Cette stratégie vous obligerait à lire l'article en premier, de sorte que vous sachiez quelle position l'œuf est dans la liste. Sinon, vous pourriez imbriquer les éléments d'une carte:

{ 
    "ItemMap": { 
     "egg":{ 
      "ImageSource": "checked.png", 
      "Selected": true 
     }, 
     "Water": { 
      "ImageSource": "checked.png", 
      "Selected": true 
     } 
    }, 
    "ListCategory": "Technology", 
    "ListCreator": "John", 
    "ListId": "e5a7ec9d-b00c-41f3-958a-84c8c183d702", 
    "ListName": "Test5", 
    "UpdateDateTıme": "2017-05-05T21:48:41.833Z" 
} 

et utiliser les expressions suivantes:

  1. UpdateExpression = ItemMap.egg.Selected = :bv
  2. ExpressionAttributeValues ​​= {:bv: true}
  3. conditionExpression = attribute_exists(ItemMap.egg) AND attribute_type(ItemMap.egg, M)
+0

Merci. C'est une bonne idée :) c'est ce que je cherche. –