条件式 - Amazon DynamoDB

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

条件式

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

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

PutItemUpdateItemDeleteItemおよびオペレーションには、ReturnValues変更前または変更後の属性値を返すために使用できるパラメータがあります。詳細については、を参照してくださいReturnValues

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

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

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

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

条件付き配置

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

次の例では、attribute_not_exists() を使用して、書き込み操作を試みる前に、プライマリキーがテーブルに存在するかどうかを確認しています。

注記

プライマリキーがパーティションキー (pk) とソートキー (sk) の両方で構成されている場合、このパラメータは、書き込み操作を試みる前に attribute_not_exists(pk)attribute_not_exists(sk) の両方が true または false のどちらに評価されるのかを確認します。

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

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

注記

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

条件付き削除

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

条件式 からの項目を検討してください。

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

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

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

  • Price は 500~600 です。

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

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 に保存されます。

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

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

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

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

条件付き更新

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

注記

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

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

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

次の例では、UpdateItem オペレーションを実行します。製品の Price を 75 減らしようとしていますが、現在の Price が 500 以下の場合、条件式が更新を防ぎます。

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

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

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

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

注記

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

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

条件式の例

次の例で使用される関数の詳細については、「比較演算子および関数リファレンス」を参照してください。式で異なる属性タイプを指定する方法の詳細については、「式を使用する時の項目属性の指定」を参照してください。

項目の属性を確認

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

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

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

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

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

属性タイプの確認

属性値のデータ型は、attribute_type 関数を使用して確認できます。条件式が true と評価される場合、オペレーションは成功で、それ以外の場合、オペレーションは失敗です。

次の例では、attribute_type を使用して、文字列セットタイプの Color 属性がある場合にのみ、製品を削除します。

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "attribute_type(Color, :v_sub)" \ --expression-attribute-values file://expression-attribute-values.json

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

{ ":v_sub":{"S":"SS"} }

文字列開始値の確認

文字列属性値が特定のサブ文字列で始まるかどうかを確認するには、begins_with 関数を使用します。条件式が true と評価される場合、オペレーションは成功で、それ以外の場合、オペレーションは失敗です。

次の例では、begins_with マップの FrontView 要素が特定の値で始まる場合にのみ、Pictures を使用して製品を削除します。

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "begins_with(Pictures.FrontView, :v_sub)" \ --expression-attribute-values file://expression-attribute-values.json

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

{ ":v_sub":{"S":"http://"} }

セット内の要素の確認

contains 関数を使用して、セット内の要素を確認したり、文字列内のサブ文字列を検索したりできます。条件式が true と評価される場合、オペレーションは成功で、それ以外の場合、オペレーションは失敗です。

次の例では、contains 文字列セットに特定の値を持つ要素がある場合にのみ、Color を使用して製品を削除します。

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "contains(Color, :v_sub)" \ --expression-attribute-values file://expression-attribute-values.json

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

{ ":v_sub":{"S":"Red"} }

属性値のサイズの確認

属性値のサイズを確認するには、size 関数を使用します。条件式が true と評価される場合、オペレーションは成功で、それ以外の場合、オペレーションは失敗です。

次の例では、size バイナリ属性のサイズが VideoClip バイトより大きい場合にのみ 64000 を使用して、製品を削除します。

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "size(VideoClip) > :v_sub" \ --expression-attribute-values file://expression-attribute-values.json

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

{ ":v_sub":{"N":"64000"} }