使用NODEjs进行DynamoDB更新:语法错误令牌:" _",附近:",_ geoloc"

时间:2017-04-25 17:54:45

标签: 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()
    },
    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)

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

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

1 个答案:

答案 0 :(得分:1)

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

"ExpressionAttributeNames" : "#geoloc = _geoloc"

另外,只需用#geoloc替换更新表达式上的_geoloc。

这应解决问题。