DynamoDBの項目の作成(putItem)で必要な知識についてはこちらをご参照ください。
もくじ
UpdateItem オペレーション
更新する項目のキーを指定する必要があります。また、変更する属性を示す更新式と、その式に割り当てる値も指定する必要があります。
UpdateExpression、ExpressionAttributeNames、ExpressionAttributeValuesの3つをセットで使います。
UpdateExpression
UpdateExpressionにはデータをどう更新するのかを指定します。
- SET: 値を上書きで保存する
- REMOVE: Attributeそのものを消す
- ADD: 数値の加減算したり、後述するセット型にデータを追加したりする
- DELETE: セット型からデータを削除する
"UpdateExpression": "set #title = :newTitle, #body = :newBody, #updatedTimestamp=:updatedTimestamp, ",
左辺の#xxx
左辺にある#xxx
など#
で始まる変数が後述のExpressionAttributeNames
に連動します。
右辺の:xxx
右辺にある:xxx
など:
で始める変数が後述のExpressionAttributeValues
に連動します。
ExpressionAttributeNames
ExpressionAttributeNamesをつかって、キーに別名を割り当てます。UpdateExpressionの#xxx
の箇所です。
"ExpressionAttributeNames": { "#title": "title", "#body": "body", '#updatedTimestamp': 'updatedTimestamp', },
ExpressionAttributeValues
ExpressionAttributeValuesをつかって、クエリの条件データの別名です。UpdateExpressionの:xxx
の箇所です。
ExpressionAttributeValues: { ':newTitle': 'タイトル', ':newBody': '本文', ':updatedTimestamp': timestamp, },
ConditionExpression
「条件付き書き込み」を行うことができます。値に指定した条件式を満たせば更新されます。
'ConditionExpression': '#updatedTimestamp < now()',
この場合、#updatedTimestamp
が現在時刻より前なら更新されます。(動作未確認)
ConditionExpression
では演算子などを用います。
#a = :val #a < :val #a <= :val #a > :val #a >= :val #a <> :val
書き込み条件式についてはこちらをご参照ください。
予約語は不可
ConditionExpressionを設定するとき、項目の属性名がDynamoDBの予約語と被らないようにする必要があります。
これを回避するためには#xxx
を別の名前に置換することで回避できるようです。
updateItem
最後にupdateItem
して更新されます。
参考URL
DynamoDBでデータを更新する際に使うUpdateExpressionについて一通りまとめてみた | Developers.IO
【詳解】JavascriptでDynamoDBを操作する - Qiita
Python(Boto3)でDynamoDB上のデータの「アップサート」と「条件付き書き込み」を一度にできるのか確認してみた | Developers.IO