如何使用Node.js向DynamoDB编号集添加数字

时间:2016-11-11 19:44:42

标签: node.js amazon-dynamodb

我只想尝试在DynamoDB中设置一个数字。此表达式正在使用无类型列表。但是为了节省空间,因为它只是存储数字,所以我将所有内容都移到普通数字集。现在无论我多么修补它,我都无法通过它。

var phoneID = req.body.PhoneID;
var category = req.body.ratingCategory;
var ratingToAdd = [Number(req.body.rating)]

var dbparams = {
"TableName": "Venue_Ratings",
Key: {
   "PhoneID" : phoneID
},
"UpdateExpression": "SET #categoryName =  list_append(#categoryName, :rating)",
"ExpressionAttributeNames" : {
    "#categoryName" : category
},
"ExpressionAttributeValues": {
    ":rating": ratingToAdd
},
"ReturnValues": "ALL_NEW"
};

此错误正在抛出An operand in the update expression has an incorrect data type

我也尝试将更新表达式更改为ADD表达式,而不是ADD #categoryName :rating

我尝试将ratingToAdd更改为不在数组中的普通数字,数组中的字符串以及不在数组中的普通字符串。

我使用docClient.update方法调用数据库。

我已经验证了db中的集合实际上是数字集并且它们存在。

我在这里缺少什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

以下代码应将数字添加到数字集(即DynamoDB数据类型'NS')。

在UpdateExpression中将此功能与ADD一起使用: -

docClient.createSet([Number(5)])

<强>代码: -

var params = {
        TableName : "Movies",
        Key : {
            "yearkey" : 2016,
            "title" : "The Big New Movie 1"
        },
        UpdateExpression : "ADD #category :categorySet",
        ExpressionAttributeNames: {
            '#category' : 'category'
        },
        ExpressionAttributeValues: {':categorySet' : docClient.createSet( [Number(5)])},
        ReturnValues: 'UPDATED_NEW'
    };