我正在编写一个lambda函数,当第一个表上有插入时,该函数将更新第二个表。这两个表都在DynamoDB中。当在第一个表中发生插入时,会触发lambda函数,根据新记录中的某些值来更新另一个表。
lambda函数位于Nodejs上
我不知道确切地如何编写更新语句,因为我必须使用第二个表中的值存储并将新值与更新求和。我想做的是这样的:
update table1 set campo1 = campo1 + newValue
我不确定如何在NodeJs + DynamoDB中执行此操作。这是功能:
const AWS = require('aws-sdk');
const documentClient = new AWS.DynamoDB.DocumentClient();
exports.getCalculos = function(event, context, callback){
let columnName = "";
let numPersonas = 0;
let domainIn = "";
event.Records.forEach((record) => {
// I just one the new records inserted
if (record.eventName == 'INSERT') {
// I read all the values and storage into newRecord
const newRecord = record.dynamodb.NewImage;
// I get the key from the new record to be
// used in the second table
domainIn = newRecord.Domain;
// I check some conditions from the new record
// to see which column I will update in the second table
// columns to update are alwayd different
if((newRecord.puerta1.S == "pass") && (newRecord.puerta2.S == "pass")){
columnName = "escape";
}
if((newRecord.puerta1.S == "close") && (newRecord.puerta2.S == "close")){
columnName = "atrapado";
}
// I get the number from the new record
numPersonas = newRecord.count;
// Then base on an ID from the new record,
// I want to update another field into another table
// It means, sum both values
const params = {
TableName :"SummaryByDomain",
Key:{
"Domain": domainIn
},
UpdateExpression: "set #field2 = :numPersonas",
ExpressionAttributeNames:{
"#field2":columnName
},
ExpressionAttributeValues: {
":numPersonas": numPersonas
},
ReturnValues:"UPDATED_NEW"
};
documentClient.update(params, function(err, data) {
if (err) {
console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2));
}
});
}
});
};
感谢@LostJon的回答。 callback
不是问题。我只需要如何使用相同的值来更新字段。
我找到并解决了。
我用过:UpdateExpression: "ADD #field2 :numPersonas",
在这种情况下,如果数值是数字,则ADD
用作数学运算符。
现在运行良好