DynamoDB – 如何在一次更新中创build映射并为其添加属性

我想创build一个新的地图,如果它不存在,然后添加一个属性到该地图。 像这样的东西:

SET #A = if_not_exists(#A, :emptyMap), #A.#B = :somevalue

但是,上述给我的错误说Two document paths overlap with each other

我唯一想做的事情是做两个更新,一个创build任何空的地图,然后再设置属性。

有一种方法可以在单个更新中完成吗?

更新

另一个用例是创build包含其他地图的地图。 目前我能想到创build以下的唯一方法是3个独立的更新调用来创build地图,如果有必要,然后另一个更新调用来添加属性:

 { Entities: { A: { B: {} } }, } 

一定会有更好的办法。

您可以分摊执行两个独立的UpdateItem调用的成本,一个用于创build#A,另一个用于向#A添加#B,方法是向条件更新添加#B到#A。

 UpdateExpression: SET #A.#B = :valueOfB ConditionExpression: attribute_exists(#A) 

如果您向#A添加了许多条目,则只会创build#A一次,并且随着#A中条目的数量增加,创build#A的摊销时间接近零。 如果你捕获一个ConditionalCheckFailedException,那就是当你用#B创build地图并调用UpdateItem的时候:

 UpdateExpression: SET #A = :valueOfMapWithBInIt ConditionExpression: attribute_not_exists(#A)