java – 如何更新AWS DynamoDB文档API上的地图或列表?
|
新的 AWS DynamoDB document API允许2个新的数据类型直接对应于基本的JSON表示:Map(又名JSON对象)和List(也称为JSON数组). 但是,我没有找到一种方法来更新这些数据类型的属性,而不会完全覆盖它们.相反,可以通过添加另一个数字来更新Number属性,因此在Java中可以执行以下操作: new AttributeUpdate("Some numeric attribute").addNumeric(17);
类似地,您可以将addElements设置为设置数据类型的属性. (在旧API中,您将使用AttributeAction.ADD用于这两个目的.) 但是对于地图或列表,您似乎必须在本地更新以前的值,然后将其替换为该值,例如在Java中: List<String> list = item.getList("Some list attribute");
list.add("new element");
new AttributeUpdate("Some list attribute").put(list);
这是可读性差得多的,在某些情况下效率更低. 所以我的问题是: >有没有办法更新Map或List数据类型的属性,而不覆盖以前的值?例如,要将一个元素添加到列表中,或将元素放在地图中? 解决方法请查看 UpdateItem API中的UpdateExpression例如给定一个包含列表的项目: {
"hashkey": {"S" : "my_key"},"my_list" : {"L":
[{"N":"3"},{"N":"7"} ]
}
您可以使用以下代码更新列表: 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);`
您还可以通过反转list_append表达式中的参数的顺序来附加到列表. 一个表达式,如:SET user.address.zipcode =:zip将解析JSON映射元素与表达式属性值{“:zip”:{“N”:“12345”}} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
