使用 NODEjs 更新 DynamoDB:语法错误标记:“_”,near:“,_geoloc”

Bub*_*ble 2 amazon-dynamodb

我的 dynamoDB 表中的每个对象看起来都像

{
  _geoloc: {lat: 123, lng: 456},
  name: 'abc',
  city: 'belarus',
  id: 'unique1'
}
Run Code Online (Sandbox Code Playgroud)

我有以下更新表达式:

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"
  };
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

据我所知.. _ 是名称中的有效字符

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

not*_*est 6

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

"ExpressionAttributeNames" : "#geoloc = _geoloc"
Run Code Online (Sandbox Code Playgroud)

另外,只需将更新表达式中的 _geoloc 替换为 #geoloc 即可。

这应该可以解决问题。