在JavaScript中更新包含连字符或短划线( - )的DynamoDB中的属性

时间:2016-09-06 11:58:40

标签: javascript node.js amazon-dynamodb


在dynamoDB中,我有一个具有连字符属性的表。 (例如名字)

现在我想用javascript更新它们。 到目前为止,这是我的代码:

//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));
          }
      });

然而,这引发了我的错误:

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

这有什么办法吗?
谢谢你的帮助:))

1 个答案:

答案 0 :(得分:10)

使用包含保留字,空格或特殊字符的属性时,必须使用占位符。看看documentation

updateExpression代替first-name,您可以使用#fn占位符,然后定义ExpressionAttributeNames

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