条件式を使用する AWS Command Line Interface (AWS CLI) の例のいくつかを次に示します。これらの例は、「ProductCatalog
」で紹介されている DynamoDB で式を使用する場合の項目属性の参照 テーブルに基づいています。このテーブルのパーティションキーは 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
および他の関数についての詳細は、「DynamoDB の条件式とフィルター式、演算子、関数」を参照してください。
条件付き削除
条件付き削除を実行するには、条件式とともに DeleteItem
オペレーションを使用します。条件式は、オペレーションが成功するためには true に評価される必要があります。それ以外の場合、オペレーションは失敗します。
上で定義した項目について考えてみます。
次の条件を満たしている場合にだけ項目を削除するとします。
-
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"}
}
注記
条件式では、:
(コロン文字) は式の属性値 (実際の値のプレースホルダー) を示します。詳細については、「」を参照してくださいDynamoDB での式属性値の使用
IN
、AND
およびその他のキーワードについての詳細は、「DynamoDB の条件式とフィルター式、演算子、関数」を参照してください。
この例では、ProductCategory
比較の評価結果は true になりますが、Price
比較は false と評価されます。これにより、条件式は false と評価され、DeleteItem
オペレーションは失敗します。
条件付き更新
条件付き更新を実行するには、条件式とともに UpdateItem
オペレーションを使用します。条件式は、オペレーションが成功するためには true に評価される必要があります。それ以外の場合、オペレーションは失敗します。
注記
UpdateItem
は更新式もサポートします。項目に加える変更を指定する変更内容を指定します。詳細については、「DynamoDB での更新式の使用」を参照してください。
上で定義した項目から開始するとします。
次の例では、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 と評価されて、更新は失敗します。
注記
条件式では、:
(コロン文字) は式の属性値 (実際の値のプレースホルダー) を示します。詳細については、「DynamoDB での式属性値の使用」を参照してください。
「>」およびその他の演算子についての詳細は、「DynamoDB の条件式とフィルター式、演算子、関数」を参照してください。
条件式の例
次の例で使用される関数の詳細については、「DynamoDB の条件式とフィルター式、演算子、関数」を参照してください。式で異なる属性タイプを指定する方法の詳細については、「DynamoDB で式を使用する場合の項目属性の参照」を参照してください。
項目の属性を確認
属性が存在するか (または存在しないか) を確認できます。条件式が 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-values
の引数は、expression-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-values
の引数は、expression-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-values
の引数は、expression-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-values
の引数は、expression-attribute-values.json ファイルに格納されます。
{
":v_sub":{"N":"64000"}
}