如何检查然后更新node.js中的AWS dynamoDB项?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查然后更新node.js中的AWS dynamoDB项?相关的知识,希望对你有一定的参考价值。
这是一个例子。我在Node.JS中使用AWS Lambda函数。这是DynamoDB中的对象:
{
email: "johndoe@gmail.com",
name: "John Doe",
score: "12"
}
现在我想首先查看他保存的分数是多少。如果他的当前分数超过了DB中已经存在的分数,那么更新数据库,否则保持原样。目前,我的代码每次都在更新。我不知道如何进行以及使用哪种功能。
如果他的分数是15,那么在检查数据库之后它应该更新为:
{
email: "johndoe@gmail.com",
name: "John Doe",
score: "15"
}
如果他的分数是7,那么应该保持原样。
{
email: "johndoe@gmail.com",
name: "John Doe",
score: "12"
}
编辑 - 以下问题也已解决。找到了解决方法。仍在寻找答案。所以保持开放。
现在我的问题是我使用相同的功能来更新和创建记录。那可能吗?
如果新用户玩游戏,他的电子邮件,姓名和分数将保存到数据库中。如果现有用户播放,只有当他的分数大于数据库中的分数时,才会更新他的分数。
这是我目前陷入困境的地方。获取这两个问题,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);
});
}
你想做的是一个conditional update。这允许您仅在满足条件时更新DynamoDB中的项目。在您遇到这种情况的情况下,新分数必须高于现有分数。
这样的条件更新看起来像下面的例子。请注意那里的ConditionExpression
,它只负责在条件满足时更新项目。
'use strict';
const aws = require('aws-sdk');
var newScore = 123;
var docClient = new AWS.DynamoDB.DocumentClient()
var params = {
TableName: "players",
Key: {
"email": "johndoe@gmail.com"
},
UpdateExpression: "set score = :num",
ConditionExpression: "score > :num",
ExpressionAttributeValues: {
":num": newScore
},
ReturnValues: "UPDATED_NEW"
};
docClient.update(params, function(err, data) {
if (err) console.log(err);
else console.log(data);
}
});
以上是关于如何检查然后更新node.js中的AWS dynamoDB项?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 AWS lambda 发布到 Node.js 中的云观察指标
Node.js 进程在 AWS Fargate 中的行为如何?
如何通过部署 Node.js AWS Beanstalk 解决 /tmp/.config 中的权限问题?
使用适用于 Node.js 的 AWS 开发工具包将二进制文件上传到 S3
如何使用适用于 Node.js 的 AWS 开发工具包将 Amazon S3 中的所有对象从一个前缀复制/移动到另一个前缀