这是一个例子。我在 Node.JS 中使用 AWS Lambda 函数。这是 DynamoDB 中的对象:
{
email: "johndoe@gmail.com",
name: "John Doe",
score: "12"
}
现在我想先看看他保存的分数是多少。如果他当前的分数高于 DB 中已经存在的分数,则更新 DB,否则保持原样。目前,我的代码每次都在更新它。我不确定如何进行以及使用哪个功能。
如果他的分数是 15,那么在检查数据库后,它应该将其更新为:
{
email: "johndoe@gmail.com",
name: "John Doe",
score: "15"
}
如果他的分数是7,它应该保持原样。
{
email: "johndoe@gmail.com",
name: "John Doe",
score: "12"
}
编辑 - 以下问题也已解决。找到了解决方法。仍在寻找答案。所以让它打开。
现在我的问题是我使用相同的功能来更新和创建记录。那可能吗?
如果新用户玩游戏,他的电子邮件、姓名和分数都会保存到数据库中。如果现有用户玩游戏,则只有他的分数大于 DB 中的分数时才会更新。
这是我目前陷入困境的地方。得到这两个问题,1. name 是保留关键字。我想知道当我刚刚使用 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);
});
}