我的dynamoDB表中的每个对象看起来都像
{
_geoloc: {lat: 123, lng: 456},
name: 'abc',
city: 'belarus',
id: 'unique1'
}
我有以下更新表达式:
const params = {
TableName: CONFIG.dynamoDB.tableName,
Key:{
"id": location.id.toString()
},
UpdateExpression: "set city=:c, _geoloc=:g",
ExpressionAttributeValues:{
":c": location.address.city,
":g": geoCodes
},
ReturnValues:"UPDATED_NEW"
};
DynamoDB会引发以下错误:
ValidationException: Invalid UpdateExpression: Syntax error; token: "_", near: ", _geoloc"
at Request.extractError (/Users/mv/pcode/meeting-finder-kinesis-consumer/node_modules/aws-sdk/lib/protocol/json.js:48:27)
据我所知.. _是名称中的有效字符
我有什么建议可以解决这个问题吗?
答案 0 :(得分:1)
同意,属性名称可以包含下划线。但是,在这种情况下,您需要在更新表达式中为属性名称定义占位符,并使用表达式属性名称来定义占位符的实际属性名称(因为它包含特殊字符)。
"ExpressionAttributeNames" : "#geoloc = _geoloc"
另外,只需用#geoloc替换更新表达式上的_geoloc。
这应解决问题。