簡體   English   中英

DynamoDB - 如何在一次更新中創建映射並向其添加屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM