node.js AWS dynamodb updateItem node.js AWS dynamodb updateItem node.js node.js

node.js AWS dynamodb updateItem


This is exactly what AWS.DynamoDB.DocumentClient's update method does.

There is already a sample code on how to use the update method here for AWS SDK for JavaScript in Node.js.

For example:

'use strict';const aws = require('aws-sdk');// It is recommended that we instantiate AWS clients outside the scope of the handler // to take advantage of connection re-use.const docClient = new aws.DynamoDB.DocumentClient();exports.handler = (event, context, callback) => {    const params = {        TableName: "MYTABLE",        Key: {            "id": "1"        },        UpdateExpression: "set variable1 = :x, #MyVariable = :y",        ExpressionAttributeNames: {            "#MyVariable": "variable23"        },        ExpressionAttributeValues: {            ":x": "hello2",            ":y": "dog"        }    };    docClient.update(params, function(err, data) {        if (err) console.log(err);        else console.log(data);    });};


You can update attributes dynamically. see below code.

export const update = (item) => {  console.log(item)  const Item = {    note: "dynamic",    totalChild: "totalChild",    totalGuests: "totalGuests"  };  let updateExpression='set';  let ExpressionAttributeNames={};  let ExpressionAttributeValues = {};  for (const property in Item) {    updateExpression += ` #${property} = :${property} ,`;    ExpressionAttributeNames['#'+property] = property ;    ExpressionAttributeValues[':'+property]=Item[property];  }    console.log(ExpressionAttributeNames);  updateExpression= updateExpression.slice(0, -1);       const params = {     TableName: TABLE_NAME,     Key: {      booking_attempt_id: item.booking_attempt_id,     },     UpdateExpression: updateExpression,     ExpressionAttributeNames: ExpressionAttributeNames,     ExpressionAttributeValues: ExpressionAttributeValues   };   return dynamo.update(params).promise().then(result => {       return result;   })   }


Here is a utility method to do that:

update: async (tableName, item, idAttributeName) => {    var params = {        TableName: tableName,        Key: {},        ExpressionAttributeValues: {},        ExpressionAttributeNames: {},        UpdateExpression: "",        ReturnValues: "UPDATED_NEW"    };    params["Key"][idAttributeName] = item[idAttributeName];    let prefix = "set ";    let attributes = Object.keys(item);    for (let i=0; i<attributes.length; i++) {        let attribute = attributes[i];        if (attribute != idAttributeName) {            params["UpdateExpression"] += prefix + "#" + attribute + " = :" + attribute;            params["ExpressionAttributeValues"][":" + attribute] = item[attribute];            params["ExpressionAttributeNames"]["#" + attribute] = attribute;            prefix = ", ";        }    }    return await documentClient.update(params).promise();}