AttributeUpdates - Amazon DynamoDB

AttributeUpdates

UpdateItem オペレーションでは、AttributeUpdates は、変更する属性の名前、それぞれに対して実行するアクション、およびそれぞれの新しい値です。そのテーブル上のインデックスのインデックスキー属性である属性を更新する場合、属性の型は、テーブルの説明の AttributesDefinition で定義されたインデックスキーの型に一致する必要があります。UpdateItem を使用して非キー属性を更新できます。

属性値を null にすることはできません。文字列型およびバイナリ型属性の長さは、ゼロより大きくなければなりません。セット型の属性を空にすることはできません。空の値を持つリクエストは、ValidationException 例外で拒否されます。

AttributeUpdates 要素は、変更する属性名と次の属性で構成されます。

  • Value - この属性の新しい値 (該当する場合)。

  • Action - 更新の実行方法を指定する値。このアクションは、データ型が数値またはセットである既存の属性に対してのみ有効です。ADD は他のデータ型に使用しないでください。

    指定したプライマリキーを持つ項目がテーブル内に見つかった場合、次の値によって以下のアクションが実行されます。

    • PUT - 指定した属性を項目に追加します。属性がすでに存在する場合は、新しい値で置き換えられます。

    • DELETE - DELETE の値が指定されていない場合、属性とその値を削除します。指定した値のデータ型は、既存の値のデータ型と一致する必要があります。

      値のセットが指定されている場合、それらの値が古いセットから削除されます。例えば、属性値が [a,b,c] のセットの場合に DELETE アクションで [a,c] を指定すると、最終的な属性値は [b] になります。空のセットを指定するとエラーになります。

    • ADD - 属性が存在しない場合、指定された値を項目に追加します。属性が存在する場合、ADD の動作は属性のデータ型によって決まります。

      • 既存の属性が数値で、Value も数値である場合、Value は既存の属性に数学的に追加されます。Value が負の数値である場合は、既存の属性から削除されます。

        注記

        ADD を使用して、更新の前に存在しない項目の数値をインクリメントまたはデクリメントした場合、DynamoDB は初期値として 0 を使用します。

        同様に、更新の前に存在しない属性値をインクリメントまたはデクリメントするために既存の項目に対して ADD を使用した場合、DynamoDB は初期値として 0 を使用します。例えば、itemcount という属性を持たない項目を更新する際に ADD を使用して、この属性に 3 を追加する場合を考えています。この場合、DynamoDB によって itemcount 属性が作成され、その初期値が 0 に設定されます。最後に 3 が追加されます。結果は、3 の値を含む新しい itemcount 属性になります。

      • 既存のデータ型がセットで、Value もセットである場合、Value が既存のセットに追加されます。例えば、属性値が [1,2] のセットで、ADD アクションで [3] が指定されている場合、最終的な属性値は [1,2,3] になります。セット属性に対して ADD アクションが指定されていて、指定した属性の型が既存のセット型に一致しない場合、エラーが発生します。

        両方のセットは同じプリミティブデータ型を持つ必要があります。例えば、既存のデータ型が文字列のセットである場合、Value も文字列のセットである必要があります。

    指定されたキーを持つ項目がテーブルに見つからない場合、次の値は次のアクションを実行します。

    • PUT - DynamoDB で、指定されたプライマリキーで新しい項目が作成され、属性が追加されます。

    • DELETE - 存在しない項目から属性を削除することはできないので何の処理も行われません。オペレーションは成功しますが、DynamoDB は新しい項目を作成しません。

    • ADD - DynamoDB で、指定されたプライマリキーと属性値の番号 (または数字のセット) を持つ項目を作成します。使用できるデータ型は、数値型と数値セット型のみです。

インデックスキーの一部である属性を指定する場合、それらの属性のデータ型は、テーブルの属性定義内のスキーマのデータ型と一致する必要があります。

代わりに UpdateExpression を使用

Music テーブル内の項目を変更する場合を考えてみます。次の AWS CLI の例に示すように、AttributeUpdates パラメータを含む UpdateItem リクエストを使用できます。

aws dynamodb update-item \ --table-name Music \ --key '{ "SongTitle": {"S":"Call Me Today"}, "Artist": {"S":"No One You Know"} }' \ --attribute-updates '{ "Genre": { "Action": "PUT", "Value": {"S":"Rock"} } }'

しかし、代わりに UpdateExpression を使用することができます。

aws dynamodb update-item \ --table-name Music \ --key '{ "SongTitle": {"S":"Call Me Today"}, "Artist": {"S":"No One You Know"} }' \ --update-expression 'SET Genre = :g' \ --expression-attribute-values '{ ":g": {"S":"Rock"} }'