如何检查然后更新node.js中的AWS dynamoDB项目?

时间:2018-12-24 15:48:01

标签: node.js aws-lambda amazon-dynamodb aws-sdk-nodejs dynamodb-queries

这里是一个例子。我在Node.JS中使用AWS Lambda函数。这是DynamoDB中的对象:

{
    email: "johndoe@gmail.com",
    name: "John Doe",
    score: "12"
}

现在我要首先检查他保存的分数是多少。如果他当前的分数超过数据库中已经存在的分数,则更新数据库,否则保持原样。目前,我的代码每次都会对其进行更新。我不确定如何进行以及使用哪个功能。

如果他的分数是15,则在检查数据库之后,应该将其更新为:

{
    email: "johndoe@gmail.com",
    name: "John Doe",
    score: "15"
}

如果他的分数是7,应该保持原样。

{
    email: "johndoe@gmail.com",
    name: "John Doe",
    score: "12"
}

编辑-以下问题也已解决。找到了解决方法。仍在寻找答案。因此,请保持打开状态。

现在我的问题是我在更新和创建记录时都使用了相同的功能。有可能吗?

如果新用户玩了游戏,他的电子邮件,姓名和分数将保存到数据库中。并且,如果现有用户在玩,则仅当他的分数大于DB中的分数时才会更新。

这是我目前遇到的问题。得到这两个问题,  1.名称是保留关键字。我不知道当我只使用put时如何允许我使用name作为属性。  2.电子邮件是密钥的一部分,因此无法更新。

这是我当前的代码,

function addToLeaderBoard(currentScore, email, name){
  var params = {
    TableName: tablename,
    Key: {
        "email": email
    },
    UpdateExpression: "set score = :num, name = :player, email = :mail",
    ConditionExpression: "score > :num",
    ExpressionAttributeValues: {
        ":num": currentScore,
        ":player": name,
        ":mail": email
    },
    ReturnValues: "UPDATED_NEW"
  };
  docClient.update(params, function(err, data) {
        if (err) console.log(err);
        else console.log(data);
    });
}

1 个答案:

答案 0 :(得分:2)

您想要做的是conditional update。这允许您仅在满足条件的情况下更新DynamoDB中的项目。在您的情况下,新的分数必须高于现有分数。

这样的条件更新将类似于以下示例。请注意其中的app.listen(3000, function () { console.log('Example app listening on port %s!', this.address().port); }); ,它仅在满足条件时才更新项目。

ConditionExpression