在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\""
这有什么办法吗?
谢谢你的帮助:))
答案 0 :(得分:10)
使用包含保留字,空格或特殊字符的属性时,必须使用占位符。看看documentation。
在updateExpression
代替first-name
,您可以使用#fn
占位符,然后定义ExpressionAttributeNames
:
ExpressionAttributeNames: {
"#fn":"first-name"
}