如何使用第二张表中的某些值将第二张表(DynamoDB)更新(使用Nodejs)到lambda函数中?

问题描述 投票:0回答:1

我正在编写一个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));
                }
            });
        }
    });
};
node.js lambda triggers aws-lambda dynamodb-queries
1个回答
0
投票

感谢@LostJon的回答。 callback不是问题。我只需要如何使用相同的值来更新字段。

我找到并解决了。

我用过:UpdateExpression: "ADD #field2 :numPersonas",

在这种情况下,如果数值是数字,则ADD用作数学运算符。

现在运行良好

© www.soinside.com 2019 - 2024. All rights reserved.