2017-03-31 11 views
3

新しいマップが存在しない場合は作成し、そのマップに属性を追加します。このような何か:DynamoDB - 1つの更新でマップを作成して属性を追加する方法

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

しかし上記のことは私に言ってエラーになりますTwo document paths overlap with each other

私はその後、別の任意の空のマップを作成するために、2回の更新を行うれるいずれかを実行するために考えています唯一の他の事属性を設定します。

単一の更新でそれを行う方法はありますか?

更新

別のユースケースは、他のマップが含まれているマップを作成しています。

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

もっと良い方法があるに違いありません。現在、私は次のように作成するの考えることができる唯一の方法は、3つの別々の更新が必要に応じてマップを作成するために呼び出し、その後、別の更新呼び出し属性を追加することです。

答えて

1

2つの別々のUpdateItem呼び出しを実行するコストを償却することができます.1つは#Aを作成し、もう1つは#Bを#Aに追加して#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) 
関連する問題