Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 :)

like image 895
weggi_swa Avatar asked Sep 06 '16 11:09

weggi_swa


1 Answers

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"
}
like image 121
Maciej Wiercioch Avatar answered Sep 19 '22 15:09

Maciej Wiercioch