java – 如何更新AWS DynamoDB文档API上的地图或列表?

前端之家收集整理的这篇文章主要介绍了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数据类型的属性,而不覆盖以前的值?例如,要将一个元素添加到列表中,或将元素放在地图中?
>如何使用Java API实现它?
>你知道未来支持这个计划吗?

@H_301_20@

解决方法

请查看 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”}}

@H_301_20@ @H_301_20@ 原文链接:https://www.f2er.com/java/126728.html

猜你在找的Java相关文章