我正在使用dynamodb数据库,并试图通过node.js更新值。我创建了一个名为counter的表,以确定存储在另一个表中的当前学生人数。我很幸运地更新了字符串值,但是在尝试更新这个计数器值时却遇到了麻烦。在过去的几个小时里,我尝试了许多不同的代码配置,但都无济于事。如有任何帮助,不胜感激。
function updateCount(operand) {
var params = {
TableName : "counter",
Key:{
"type" : {
"S" : "student"
}
},
UpdateExpression : "SET pos = pos + :o",
ExpressionAttributeValues:{
":o": Number(operand)
},
ReturnValues:"UPDATED_NEW"
}
docClient.update(params, function(err, data) {
if (err)
console.log(err);
else {
console.log(data);
res.send(JSON.stringify(data, null, 2));
}
});
}
updateCount (1);当前的错误显示了这个,但我有更多:C:UsersKo_KorDesktopCS 496assignment#3>node server.jsExpress开始于http://localhost:8081;按Ctrl-C终止。{[ValidationException:提供的键元素与模式不匹配]message: '提供的键元素与模式不匹配',代码:"ValidationException异常",时间:2016年10月21日星期五20:36:43 GMT-0700(太平洋夏令时)requestId:"T8G9V8KF587THVK5OTGQ95TH9VVV4KQNSO5AEMVJF66Q9ASUAAJG",statusCode: 400,的事情:假的,retryDelay: 0}
我也试过使用这个格式:
ExpressionAttributeValues:{
":o": {"N": operand}
},
DynamoDB不提供这种特性。您可以尝试使用DynamoDB原子计数器,但我建议尝试另一种方法,如字符串UUID
.
您可以使用ADD
[...]
UpdateExpression: "ADD counter :o SET updatedAt = :updatedAt",
ExpressionAttributeValues: {
':o': valueToIncrementWith,
':updatedAt': Date.now()
}
[...]