DynamoDB - How to create map and add attribute to it in one update(DynamoDB - 如何在一次更新中创建地图并向其添加属性)
问题描述
如果它不存在,我想创建一个新地图,然后向该地图添加一个属性.像这样的:
I want to create a new map if it doesn't exist and then add an attribute to that map. Something like this:
SET #A = if_not_exists(#A, :emptyMap), #A.#B = :somevalue
但是执行上述操作给我的错误是 两个文档路径相互重叠
However doing the above gives me the error saying Two document paths overlap with each other
我唯一想做的另一件事是进行两次更新,一次创建任何空地图,然后另一次设置属性.
The only other thing I am thinking to do is do TWO updates, one to create any empty maps and then another to set attributes.
有没有办法在一次更新中做到这一点?
更新
另一个用例是创建包含其他地图的地图.目前,我能想到的创建以下内容的唯一方法是 3 个单独的更新调用来创建地图(如果需要),然后再调用另一个更新调用来添加属性:
Another use case is creating maps that contain other maps. Currently the only way I can think of to create the following is 3 separate update calls to create the maps if necessary and then another update call to add attributes:
{
Entities: { A: { B: {} } },
}
一定有更好的办法.
推荐答案
您可以分摊执行两次单独的 UpdateItem 调用的成本,一次创建#A,另一个通过将#B 添加到#A 来将#B 添加到#A#A 有条件更新.
You can amortize the cost of doing two seperate UpdateItem calls, one to create #A, and the other to add #B to #A by adding #B to #A with a conditional update.
UpdateExpression: SET #A.#B = :valueOfB
ConditionExpression: attribute_exists(#A)
如果您向#A 添加许多条目,那么您只创建一次#A,并且随着#A 中条目数量的增加,创建#A 的摊销时间接近于零.如果您捕获到 ConditionalCheckFailedException,那就是您将在其中创建带有 #B 的地图并调用 UpdateItem:
If you add many entries to #A, then you only create #A once, and as the number of entries in #A increases, the amortized time to create #A approaches zero. If you catch a ConditionalCheckFailedException, that is when you would create the map with #B already in it and call UpdateItem:
UpdateExpression: SET #A = :valueOfMapWithBInIt
ConditionExpression: attribute_not_exists(#A)
这篇关于DynamoDB - 如何在一次更新中创建地图并向其添加属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:DynamoDB - 如何在一次更新中创建地图并向其添加属性
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- addEventListener 在 IE 11 中不起作用 2022-01-01