DynamoDB:在更新之前删除项目

时间:2019-06-24 08:29:58

标签: aws-lambda amazon-dynamodb

这是我的Lambda函数:

const AWS = require("aws-sdk");
const dynamodb = new AWS.DynamoDB({region: "ap-southeast-2"});

exports.handler = function(event, context) {

var tableName = "MyTable1";

dynamodb.updateItem({
    "TableName": tableName,
    "Key": {
        "sub": {
            "S": event.sub
        }
    },

    "UpdateExpression": "ADD EventID :val1",
    "ExpressionAttributeValues": {
        ":val1": {
            "SS": event.EventID
        }
    },

    "ReturnValues": "ALL_NEW",
}, function(err, data) {
    if (err) {
        context.fail('ERROR: Dynamo failed: ' + err);
    } else {
        console.log('Dynamo Success: ' + JSON.stringify(data, null, '  '));
        context.succeed('SUCCESS');
    }
});

}

当我添加或插入新项目时,代码工作正常。

我想做的是先删除项目,然后再进行更新?

我试图通过用SET替换ADD来更改UpdateExpression

 "UpdateExpression": "SET EventID :val1",

但是随后出现语法错误。

有人在进行更新之前删除项目的最佳方法是什么吗?

例如,如果我在DymnamoDB中有此数据

ID      EventID
789534  { "BA345", "GA932", "TA900" }

使用以下数据进行新的更新

ID      EventID
789534  { "CA345"}

它变成

ID      EventID
789534  { "CA345"}

因此,基本上每个更新都应像是一个新的/初始添加。

如果不清楚,请随时提出。提前谢谢了。

1 个答案:

答案 0 :(得分:0)

要完全替换该项目,您需要使用PutItem而不是UpdateItem。两者之间的区别是

  • PutItem将添加新项(如果不存在),并替换(如果找到)
  • UpdateItem将添加新项(如果不存在),并且 update (如果找到)。这也可以将新字段添加到现有项目。

API Reference对这些操作和其他操作有更全面的说明。