DynamoDB の UpdateItem で加算処理を行う
概要
加算処理を行うとき毎回調べるのでメモる。
コード
TypeScript だとこんな感じ。
import * as DynamoDB from 'aws-sdk/clients/dynamodb'; const DYNAMODB_API_VERSION = '2012-10-08'; const REGION = 'ap-northeast-1'; const TABLE_NAME = 'sample-table'; const dynamodbDocumentClient = new DynamoDB.DocumentClient({ apiVersion: DYNAMODB_API_VERSION, region: REGION, }); (async () => { const params: DynamoDB.DocumentClient.UpdateItemInput = { TableName: TABLE_NAME, Key: { pk: 'sample-id', sk: 1, }, UpdateExpression: 'set cnt = cnt + :add', ExpressionAttributeValues: { ':add': 1, }, }; await dynamodbDocumentClient.update(params).promise(); })()
ダメな例
普通に +1 とかを書くのはエラーになる。
import * as DynamoDB from 'aws-sdk/clients/dynamodb'; const DYNAMODB_API_VERSION = '2012-10-08'; const REGION = 'ap-northeast-1'; const TABLE_NAME = 'sample-table'; const dynamodbDocumentClient = new DynamoDB.DocumentClient({ apiVersion: DYNAMODB_API_VERSION, region: REGION, }); (async () => { const params: DynamoDB.DocumentClient.UpdateItemInput = { TableName: TABLE_NAME, Key: { pk: 'sample-id', sk: 1, }, UpdateExpression: 'set cnt = cnt + 1', }; await dynamodbDocumentClient.update(params).promise(); })();
UnhandledPromiseRejectionWarning: ValidationException: Invalid UpdateExpression: Syntax error; token: "1", near: "+ 1"
以上。