使用列表的新属性更新DynamoDB项

时间:2017-09-08 20:13:26

标签: amazon-dynamodb

所以我在DynamoDB中有一个项目:

{
  "id": "1",
  "foo": "bar"
}

我想为所述项添加一个新属性,属性为:

{
  "newAttr": [{ "bar": 1 }, { "bar": 2 }, { "bar": 3 }]
}

现在我在JS中使用AWS-SDK这样做:

client.update({
  ExpressionAttributeNames: { '#newAttr': 'newAttr' },
  ExpressionAttributeValues: { ':newAttr': newAttr },
  Key: { "id": "1" },
  TableName: "foo",
  UpdateExpression: "SET #newAttr = :newAttr"
}, callback)

然而,我收到错误:

  

ExpressionAttributeValues包含无效值:一个或多个   参数值无效:AttributeValue可能不包含   key的空字符串:newAttr

所以,如果我去JSON.stringify(newAttr)那么它很好,但我不希望这个新属性成为一个字符串,我希望它是一个列表。

那么我做错了什么?

1 个答案:

答案 0 :(得分:0)

  

尝试ADD而不是SET

    client.update({
  ExpressionAttributeNames: { '#newAttr': 'newAttr' },
  ExpressionAttributeValues: { ':newAttr': newAttr },
  Key: { "id": "1" },
  TableName: "foo",
  UpdateExpression: "ADD #newAttr = :newAttr"
}, callback)

我最初遇到了这些问题。我确定你在所有低级代码中浪费时间与DynamoDB进行交互。

使用ODM(ORM Like)进行文件存储,为您处理所有障碍。

https://github.com/clarkie/dynogels

是我用过的东西,会让你的生活更轻松。

  

不允许使用空字符串

无法在根级别存储DynamoDB的空字符串。您可以在嵌套对象中使用它。

DynamoDB允许的数据类型:

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html

希望这有帮助。