[英]DynamoDB - How to create map and add attribute to it in one update
我想創建一個新的地圖,如果它不存在,然后添加一個屬性到該地圖。 像這樣的東西:
SET #A = if_not_exists(#A, :emptyMap), #A.#B = :somevalue
但是,執行上述操作會給出錯誤說明Two document paths overlap with each other
我想要做的唯一其他事情是做兩個更新,一個用於創建任何空地圖,另一個用於設置屬性。
有沒有辦法在一次更新中完成?
更新
另一個用例是創建包含其他地圖的地圖。 目前,我可以想到創建以下內容的唯一方法是3個單獨的更新調用,以便在必要時創建映射,然后再添加另一個更新調用以添加屬性:
{
Entities: { A: { B: {} } },
}
肯定有更好的辦法。
您可以分攤兩個單獨的UpdateItem調用的成本,一個用於創建#A,另一個用於將#B添加到#A,方法是通過條件更新將#B添加到#A。
UpdateExpression: SET #A.#B = :valueOfB
ConditionExpression: attribute_exists(#A)
如果向#A添加許多條目,則只創建一次#A,隨着#A中條目數的增加,創建#A的分攤時間接近零。 如果你遇到ConditionalCheckFailedException,那就是你在其中創建了#B的地圖並調用UpdateItem:
UpdateExpression: SET #A = :valueOfMapWithBInIt
ConditionExpression: attribute_not_exists(#A)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.