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”}} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |