将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整个列表以字符串,而不是添加新元素到列表中。
有没有办法做到这一点,而无需下载整个列表,添加字符串,然后重新上传?只需要在列表的末尾添加一个新元素就可以分配更清洁。
答
如果有人遇到类似的问题,可以将其解决。
而不是试图元素如下添加到该列表中,我改变了场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?
您用[tag:amazon-simpledb]标记了此问题,但您似乎正在使用[tag:amazon-dynamodb]。 –