weggi_swa weggi_swa - 3 months ago 63
Node.js Question

Updating an attribute in DynamoDB that contains hyphen or dash (-) in javascript



in dynamoDB I have a table that has attributes that are hyphenated. (e.g. first-name)

Now I want to update them using javascript.
This is my code so far:

//create UpdateExpression and ExpressionAttributeValues
let updateExpression = "set ";
let expressionAttributeValues ={};
if (e.firstName !== null){
updateExpression = updateExpression + " "+ 'first-name'+" = :f,";
expressionAttributeValues[":f"] = e.firstName;
}

let table = "tableName";
let bpNumber = e.bpNumber;
let params = {
TableName: table,
Key: {
"bpNumber": bpNumber
},
UpdateExpression: updateExpression,
ExpressionAttributeValues: expressionAttributeValues,
ReturnValues:"UPDATED_NEW"

};

console.log("Updating the item...");
docClient.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));
}
});


However this throws me this error:

Unable to update item. Error JSON: {
"message": "Invalid UpdateExpression: Syntax error; token: \"-\", near: \"first-name\""


Is there any way around this?

Thank you for your help :)

Answer

When you use attributes that contain reserved words, spaces or special characters you have to use placeholders. Take a look at documentation.

In the updateExpression instead of first-name you can use, for example, #fn placeholder and then define ExpressionAttributeNames:

ExpressionAttributeNames: {
    "#fn":"first-name
}