列表中嵌套地图的UpdateExpression增量值

时间:2018-12-08 03:09:48

标签: amazon-web-services nosql amazon-dynamodb

我具有以下表格结构:

{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帖子,但仍然无法实现。

1 个答案:

答案 0 :(得分:0)

您无法有效地定位要更新的列表中的项目。我认为您的表格结构不可行。我前段时间有同样的问题,但没有找到解决方案。我改变了可能的表结构。

我想您的桌子设计得不适合您想要做的事情。 DynamoDB是一个列数据库,请使用它。

表建议:

  • 哈希:myHashKey //与现在相同
  • 范围:info 其他字段myAttribute

当您知道myHashKeyinfo时,您可以轻松找到并更新。

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();
});

}