Вот пример.Я использую функцию AWS Lambda в Node.JS.Это объект в 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"
}
Редактировать - Следующая проблема также была решена.Нашел обходной путь.Все еще ищу ответы.Поэтому оставьте его открытым.
Теперь моя проблема в том, что я использую одну и ту же функцию для обновления и создания записей.Возможно ли это?
Если новый пользователь играет в игру, его адрес электронной почты, имя и счет сохраняются в БД.А если играет существующий пользователь, обновляется только его счет, если он больше, чем в БД.
Вот где я застрял.Получив эти 2 вопроса, 1. 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);
});
}