通过node.js增加dynamodb表中存储的值



我正在使用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()
}
[...]

最新更新