piz*_*r0b 9 javascript amazon-web-services node.js amazon-dynamodb
我想创建一个新地图(如果它不存在),然后向该地图添加属性。像这样的东西:
SET #A = if_not_exists(#A, :emptyMap), #A.#B = :somevalue
然而,执行上述操作给我带来了错误:Two document paths overlap with each other
我唯一想做的另一件事是进行两次更新,一个用于创建任何空地图,然后另一个用于设置属性。
有没有办法在一次更新中做到这一点?
更新
另一个用例是创建包含其他地图的地图。目前我能想到的创建以下内容的唯一方法是 3 个单独的更新调用来创建地图(如果需要),然后另一个更新调用来添加属性:
{
Entities: { A: { B: {} } },
}
Run Code Online (Sandbox Code Playgroud)
一定会有更好的办法。
您可以分摊执行两个单独的 UpdateItem 调用的成本,一个调用创建 #A,另一个调用通过条件更新将 #B 添加到 #A,将 #B 添加到 #A。
UpdateExpression: SET #A.#B = :valueOfB
ConditionExpression: attribute_exists(#A)
Run Code Online (Sandbox Code Playgroud)
如果向 #A 添加许多条目,则只需创建 #A 一次,并且随着 #A 中条目数量的增加,创建 #A 的摊销时间接近于零。如果您捕获 ConditionalCheckFailedException,那么您将创建其中已包含 #B 的地图并调用 UpdateItem:
UpdateExpression: SET #A = :valueOfMapWithBInIt
ConditionExpression: attribute_not_exists(#A)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2627 次 |
最近记录: |