Как обновить (используя Nodejs) вторую таблицу (DynamoDB) в лямбда-функцию, используя некоторые значения из 2-й таблицы? - PullRequest
0 голосов
/ 20 ноября 2019

Я пишу лямбда-функцию, которая обновляет вторую таблицу при наличии вставки в первую таблицу. Обе таблицы находятся в DynamoDB. Когда происходит вставка в первую таблицу, запускается лямбда-функция для обновления другой таблицы на основе некоторых значений из новой записи.

Лямбда-функция на 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));
                }
            });
        }
    });
};

1 Ответ

1 голос
/ 20 ноября 2019

Спасибо @LostJon за ваш ответ. callback не проблема. Мне просто нужно, как обновить поле, используя то же значение.

Я нашел его и решил.

Я использовал: UpdateExpression: "ADD #field2 :numPersonas",

В этом случае ADD работает как математический оператор, если значения являются числовыми.

теперь работает хорошо

...