2017-09-23 3 views
1

J'ai un élément de liste dans AWS NoSQL DB.Ajouter elemet à la fin d'une liste - AWS DB à partir d'Android

Je souhaite ajouter une valeur de chaîne à la fin de cette liste. Mon code est le suivant:

HashMap<String, AttributeValue> primaryKey = new HashMap<>(); 
       AttributeValue key = new AttributeValue() 
         .withS(Array1[x]); 
       AttributeValue range = new AttributeValue() 
         .withS(Array2[x]); 
       primaryKey.put("XXXXX", key); 
       primaryKey.put("XXXXX", range); 

       try { 
        UpdateItemRequest request = new UpdateItemRequest() 
          .withTableName("XXXXXXXXXXXXXXXX") 
          .withKey(primaryKey) 
          .addAttributeUpdatesEntry(
            "groups", new AttributeValueUpdate() 
            .withValue(new AttributeValue().withS(groupID)) 
            .withAction(AttributeAction.ADD)); 
        dynamoDBClient.updateItem(request); 

Sans surprise ce que la liste écrase toute la AWS DB avec la chaîne plutôt que d'ajouter un nouvel élément à la liste.

Y a-t-il un moyen de le faire sans avoir à télécharger la liste complète, en ajoutant la chaîne et en la téléchargeant de nouveau? Serait plus propre à demander simplement qu'un nouvel élément est ajouté à la fin de la liste.

+1

Vous avez tagué cette question avec [tag: amazon-simpledb] mais vous semblez utiliser [tag: amazon-dynamodb]. –

Répondre

0

Compris si quelqu'un a un problème similaire.

Plutôt que d'essayer d'ajouter un élément au champ « groupes » qui est une liste que j'ai changé le champ dans DynamoDB à une chaîne fixé et ajusté le code comme suit:

try { 
        UpdateItemRequest request = new UpdateItemRequest() 
          .withTableName("XXXXXXXXXXX") 
          .withKey(primaryKey) 
          .addAttributeUpdatesEntry(
            "groups", new AttributeValueUpdate() 
            .withValue(new AttributeValue().withSS(groupID)) 
            .withAction(AttributeAction.ADD)); 
        dynamoDBClient.updateItem(request); 

Cela ajoute maintenant une nouvelle élément à la fin de la chaîne définie

0

Je crois que vous êtes à la recherche en fait pour cela:

UpdateItemRequest request = new UpdateItemRequest(); 
    request.setTableName("myTableName"); 
    request.setKey(Collections.singletonMap("hashkey", 
      new AttributeValue().withS("my_key"))); 
    request.setUpdateExpression("list_append(:prepend_value, my_list)"); 
    request.setExpressionAttributeValues(
      Collections.singletonMap(":prepend_value", 
        new AttributeValue().withN("1")) 
    ); 
    dynamodb.updateItem(request); 

Exemple tiré de: How to update a Map or a List on AWS DynamoDB document API?