Help us understand the problem. What is going on with this article?

DynamoDB の条件付き書き込みを試してみる - condition-expression

デフォルトでは、DynamoDB 書き込みオペレーション (PutItem、UpdateItem、DeleteItem) は無条件です。
つまり、これらの各オペレーションでは、指定されたプライマリキーを持つ既存の項目が上書きされます。

条件付き書き込みを利用すると項目の属性が 1 つ以上の想定条件を満たす場合のみに成功できるようできます。それ以外の場合は、エラーが返されます。

とりあえず検証してみる。


1.適当なtableを作成する

項目を追加する。

item.json
{
    "Id": { "N": "100"},
    "Price": {"N": "3000"},
    "Category": {"S": "Tshirt"}
}
aws dynamodb put-item \
    --table-name fashion \
    --item file://item.json 

2.更新される場合

ここでは、limit 2000 以下のものに対してのみ、update するものとする。

values.json
{
    ":discount": { "N": "600"},
    ":limit": {"N": "2000"}
}
aws dynamodb update-item \
    --table-name fashion \
    --key '{"Id": {"N": "100"}}' \
    --update-expression "SET Price = Price - :discount" \
    --condition-expression "Price > :limit" \
    --expression-attribute-values file://values.json

この場合は、3000 - 600 = 2400 なので更新される。

3.更新されない場合

では、さらに discount 600 にしてみます。

values2.json
{
    ":discount": { "N": "600"},
    ":limit": {"N": "2000"}
}
aws dynamodb update-item \
    --table-name Fashion \
    --key '{"Id": {"N": "100"}}' \
    --update-expression "SET Price = Price - :discount" \
    --condition-expression "Price > :limit" \
    --expression-attribute-values file://values2.json

この場合は、2400 - 600 = 1800 で、limit = 2000 より小さいので更新されない。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした