将elemet添加到列表的末尾 - 来自Android的AWS DB

问题描述:

我在AWS NoSQL DB中拥有一个列表项。将elemet添加到列表的末尾 - 来自Android的AWS DB

我想添加一个字符串值到列表的末尾。我的代码如下:

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); 

不出所料这只是覆盖在AWS DB整个列表以字符串,而不是添加新元素到列表中。

有没有办法做到这一点,而无需下载整个列表,添加字符串,然后重新上传?只需要在列表的末尾添加一个新元素就可以分配更清洁。

+1

您用[tag:amazon-simpledb]标记了此问题,但您似乎正在使用[tag:amazon-dynamodb]。 –

如果有人遇到类似的问题,可以将其解决。

而不是试图元素如下添加到该列表中,我改变了场DynamoDB设置字符串中的“组”字段和调整代码:

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

现在,这增加了一个新的元素添加到字符串的结尾设置

我相信你实际上是在寻找这样的:取自

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); 

例子:How to update a Map or a List on AWS DynamoDB document API?