我具有以下表格结构:
{myHashKey: x, someList: [{info: uniqueID, myAttribute: number, ...}, ...]}
对于给定的number
子属性,我想增加info
。
也就是说,说我在dynamodb中插入了以下项目:
{myHashKey: 'xxxx', someList: [{info: 'a', myAttribute: 1}, {info: 'b', myAttribute: 42}]}
我必须执行什么UpdateExpression才能更新项目以将给定信息的myAttribute增加给定数字,例如我想将信息1
的myAttribute a
增加到{ {1}},即从上面得到:
5
?
我阅读了许多文档和其他stackoverflow帖子,但仍然无法实现。
答案 0 :(得分:0)
您无法有效地定位要更新的列表中的项目。我认为您的表格结构不可行。我前段时间有同样的问题,但没有找到解决方案。我改变了可能的表结构。
我想您的桌子设计得不适合您想要做的事情。 DynamoDB是一个列数据库,请使用它。
表建议:
myHashKey
//与现在相同info
其他字段myAttribute
当您知道myHashKey
和info
时,您可以轻松找到并更新。
var docClient = new AWS.DynamoDB.DocumentClient();
function async increment(myHashKeyValue, infoValue, value = 1) {
var params = {
TableName:table,
Key:{
"myHashKey": myHashKeyValue,
"info": infoValue,
},
UpdateExpression: "set #myAttribute = #myAttribute + :val",
ExpressionAttributeValues:{
":val": value,
},
ExpressionAttributeNames:{
'#myAttribute': 'myAttribute',
},
ReturnValues:"UPDATED_NEW"
};
await docClient.update(params).promise();
});
}