所以我在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)
那么它很好,但我不希望这个新属性成为一个字符串,我希望它是一个列表。
那么我做错了什么?
答案 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
希望这有帮助。