Amazon dynamodb 使用NODEjs:Syntax error-token:_&引用;,近处:“_geoloc“;

Amazon dynamodb 使用NODEjs:Syntax error-token:_&引用;,近处:“_geoloc“;,amazon-dynamodb,Amazon Dynamodb,dynamoDB表中的每个对象看起来都像 { _geoloc: {lat: 123, lng: 456}, name: 'abc', city: 'belarus', id: 'unique1' } 我有以下更新表达式: const params = { TableName: CONFIG.dynamoDB.tableName, Key:{ "id": location.id.toString() }, UpdateExpressio

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)
据我所知名称中包含的有效字符


有什么建议可以解决这个问题吗?

同意,属性名称可以包含下划线。但是,在这种情况下,需要在更新表达式中为属性名称定义占位符,并使用表达式属性名称定义占位符的实际属性名称(因为它包含特殊字符)

"ExpressionAttributeNames" : "#geoloc = _geoloc"
此外,只需将更新表达式上的_geoloc替换为#geoloc即可


这应该可以解决问题。

同意,属性名称可以包含下划线。但是,在这种情况下,需要在更新表达式中为属性名称定义占位符,并使用表达式属性名称定义占位符的实际属性名称(因为它包含特殊字符)

"ExpressionAttributeNames" : "#geoloc = _geoloc"
此外,只需将更新表达式上的_geoloc替换为#geoloc即可

这应该可以解决问题