附加到列表(如果存在)或在 dynamoDB 中添加列表

Ris*_*ain 3 javascript amazon-web-services node.js amazon-dynamodb

我在 DynamoDB 中有一个产品表,其中包含一些项目。现在我需要将买家列表添加到可以增长的产品中,即附加到列表中。它适用于如果我有一个空列表或一个包含表项中某些项目的列表,但对于第一次添加它会引发错误。有没有办法检查列表是否存在然后附加其他添加列表。这是我的代码

let params = {
    TableName: "product",
    ExpressionAttributeNames: {
        "#Y": "buyer"
    },
    ExpressionAttributeValues: {
        ":y": ["PersonXYZ"]
    },
    Key: {
        id: 'Hy2H4Z-lf'
    },
    UpdateExpression: "SET #Y = list_append(#Y,:y)"
};
updateItemInDDB(params).then((data) => {
    res.status(200).send(data);
}, err => {
    console.log(err);
    res.sendStatus(500);
});
Run Code Online (Sandbox Code Playgroud)

UpdateItemInDDB 只是一个接受参数并在其上运行 dnamodb 代码的函数。我正在使用带有文档客户端的 DynamoDB 的 javascript sdk。

Nas*_*tad 20

var params = {
            TableName: "user",
            Key: {
                "user_id": {
                    S: user_id
                }
            },
            UpdateExpression: "SET #ri = list_append(if_not_exists(#ri, :empty_list), :vals)",
            ExpressionAttributeNames: {
                "#ri": "images"
            },
            ExpressionAttributeValues: {
                ":vals": {"L": [{
                    "S": "dummy data"
                }]},
                ":empty_list": {"L": []}
            },
            ReturnValues: 'ALL_NEW'
        };
Run Code Online (Sandbox Code Playgroud)

":empty_list": {"L": []} 如果你想设置空列表,这很重要,否则会给出以下异常。

"errorMessage": "ExpressionAttributeValues contains invalid value: Supplied AttributeValue is empty, must contain exactly one of the supported datatypes for key :empty_list",
  "errorType": "ValidationException"
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这应该被标记为正确答案,因为您不必两次访问 dynamodb。 (2认同)