Lambda(Node.js)からDynamoDBをUPDATE レコードの更新・加減算
AWSのLambda(Node.js)からDynamoDBのレコードを更新する方法について記載します。
UPDATEによって挿入・カラムの追加・既にあるデータの加減算についてコピペできるコードです。
その他Lambda(Node.js)からDynamoDBの操作(取得・挿入・更新・上書き・削除)について以下にまとめてます。
LambdaからDynamoDBの操作

1. レコードの挿入・カラムの追加
updateItemでレコード追加できます。
既存のレコードがある場合はカラムごとに上書き・追加されます。
これは以下でも記載。
LambdaからDynamoDBの操作
var aws = require('aws-sdk');
var dynamo = new aws.DynamoDB();
exports.handler = async (event) => {
let prm = {
TableName: "tablename",
Key: {
pk_name:{S:"pk_prm"},
sk_name:{S:"sk_prm"},
},
UpdateExpression: "set #v1=:v1,#v2=:v2",
ExpressionAttributeNames:{
"#v1":"datetime",//カラム名
"#v2":"value",//カラム名
},
ExpressionAttributeValues: {
":v1": {S:"2021-03-10T10:10:10"},//カラムの値
":v2": {N:"2.34"},//カラムの値
}
};
let res= await dynamo_update(prm);
return res;
};
function dynamo_update(params){
return new Promise((resolve, reject) => {
dynamo.updateItem(params,function(err, data) {
if (err) {
reject(err, err);
} else {
resolve("updated");
}
});
});
}
2. カラム値の加減算
updateItemは、レコードの特定カラムに既に数値が入っている場合、その値に加算したり減算したりが行えます。UpdateExpressionを以下のように指定します。
UpdateExpression: “set #v1=:v1,#v2=#v2+:v2“
この場合、カラムv1は上書き、カラムv2は前回値+今回値に更新されます。
※加減算する数値が登録されていない場合、エラーになるので注意。先に登録しておく必要があります。
var aws = require('aws-sdk');
var dynamo = new aws.DynamoDB();
exports.handler = async (event) => {
let prm = {
TableName: "tablename",
Key: {
pk_name:{S:"pk_prm"},
sk_name:{S:"sk_prm"},
},
UpdateExpression: "set #v1=:v1,#v2=#v2+:v2",//v1は上書き、v2は加算
ExpressionAttributeNames:{
"#v1":"datetime",//カラム名
"#v2":"value",//カラム名
},
ExpressionAttributeValues: {
":v1": {S:"2021-03-10T10:10:10"},//カラムの値
":v2": {N:"2.34"},//カラムの値
}
};
let res= await dynamo_update(prm);
return res;
};
function dynamo_update(params){
return new Promise((resolve, reject) => {
dynamo.updateItem(params,function(err, data) {
if (err) {
reject(err, err);
} else {
resolve("updated");
}
});
});
}
ディスカッション
コメント一覧
まだ、コメントがありません