メニュー
Amazon DynamoDB
開発者ガイド (API Version 2012-08-10)

条件式

DynamoDB テーブルのデータを操作するには、PutItemUpdateItem、および DeleteItem オペレーションを使用します。(1 回の呼び出しで複数の PutItem または DeleteItem オペレーションを実行するために BatchWriteItem も使用できます)

これらのデータ操作オペレーションでは、どの項目を修正する必要があるかを判断するために、条件式を指定できます。条件式が true と評価される場合、オペレーションは成功で、それ以外の場合、オペレーションは失敗です。

条件式を使用する AWS CLI の例のいくつかを次に示します。これらの例は、「項目属性の指定」で紹介されている ProductCatalog テーブルに基づいています。このテーブルのパーティションキーは Id です。ソートキーはありません。次の PutItem オペレーションは、この例で参照するサンプル ProductCatalog 項目を作成します。

Copy
aws dynamodb put-item \ --table-name ProductCatalog \ --item file://item.json

--item の引数は、ファイル item.json に保存されます。(分かりやすいように、いくつかの項目属性のみが使用されます)

Copy
{ "Id": {"N": "456" }, "ProductCategory": {"S": "Sporting Goods" }, "Price": {"N": "650" } }

既存の項目の上書きを防止

PutItem オペレーションはキーが同じ項目を上書します (存在する場合)。これを回避するには、条件式を使用します。これにより、問題の項目が同じキーを持っていない場合にのみ書き込みが続行されます。

Copy
aws dynamodb put-item \ --table-name ProductCatalog \ --item file://item.json \ --condition-expression "attribute_not_exists(Id)"

条件式が false と評価し、DynamoDB は次のエラーメッセージを返します。条件付きリクエストが失敗しました

注記

attribute_not_exists および他の関数についての詳細は、「比較演算子および関数リファレンス」を参照してください。

項目の属性を確認

属性が存在するか (または存在しないか) を確認できます。条件式が true と評価される場合、オペレーションは成功で、それ以外の場合は失敗です。

次の例では、Price 属性がない場合にのみ製品を削除するために attribute_not_exists を使用します。

Copy
aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "attribute_not_exists(Price)"

DynamoDB は attribute_exists 関数も提供します。次の例では、悪いレビューを受け取った場合のみ製品を削除します。

Copy
aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "attribute_exists(ProductReviews.OneStar)"

注記

attribute_not_existsattribute_exists およびその他の関数についての詳細は、「比較演算子および関数リファレンス」を参照してください。

条件付き削除

条件付き削除を実行するには、条件式とともに DeleteItem オペレーションを使用します。条件式は、オペレーションが成功するためには true に評価される必要があります。それ以外の場合、オペレーションは失敗します。

条件式 からの項目をもう一度取り上げます。

Copy
{ "Id": { "N": "456" }, "Price": { "N": "650" }, "ProductCategory": { "S": "Sporting Goods" } }

ここで、次の条件を満たしている場合にだけ項目を削除するとします。

  • ProductCategory は「Sporting Goods」または「Gardening Supplies」のどちらかです。

  • Price は 500~600 です。

次の例では、項目を削除しようとしています。

Copy
aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"456"}}' \ --condition-expression "(ProductCategory IN (:cat1, :cat2)) and (Price between :lo and :hi)" \ --expression-attribute-values file://values.json

--expression-attribute-values の引数は、ファイル values.json に保存されます。

Copy
{ ":cat1": {"S": "Sporting Goods"}, ":cat2": {"S": "Gardening Supplies"}, ":lo": {"N": "500"}, ":hi": {"N": "600"} }

注記

条件式で、: (コロン) は式の属性値を示します。実際の値を表すプレースホルダーです。 詳細については、「式の属性値」を参照してください。

INAND およびその他のキーワードについての詳細は、「比較演算子および関数リファレンス」を参照してください。

この例では、ProductCategory 比較の評価結果は true になりますが、Price 比較は false と評価されます。これにより、条件式は false と評価され、DeleteItem オペレーションは失敗します。

条件付き更新

条件付き更新を実行するには、条件式とともに UpdateItem オペレーションを使用します。条件式は、オペレーションが成功するためには true に評価される必要があります。それ以外の場合、オペレーションは失敗します。

注記

UpdateItem更新式もサポートします。項目に加える変更を指定する変更内容を指定します。詳細については、「更新式」を参照してください。

条件式 に示す項目から開始するとします。

Copy
{ "Id": { "N": "456"}, "Price": {"N": "650"}, "ProductCategory": {"S": "Sporting Goods"} }

次の例では、UpdateItem オペレーションを実行します。また、製品の Price を 75 減らすよう試みます。ただし、現在 Price が 500 を下回る場合、条件式により更新することはできません。

Copy
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --update-expression "SET Price = Price - :discount" \ --condition-expression "Price > :limit" \ --expression-attribute-values file://values.json

--item の引数は、ファイル values.json に保存されます。

Copy
{ ":discount": { "N": "75"}, ":limit": {"N": "500"} }

開始 Price が 650 の場合、UpdateItem オペレーションによって Price は 575 に下げられます。UpdateItem アクションを再度実行すると、Price は 500 に減らされます。3 度目に実行した場合、条件式は false と評価されて、更新は失敗します。

注記

条件式で、: (コロン) は式の属性値を示します。実際の値を表すプレースホルダーです。詳細については、「式の属性値」を参照してください。

>」およびその他の演算子についての詳細は、「比較演算子および関数リファレンス」を参照してください。