首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AWS DynamoDB尝试添加到集合中-操作数不正确

AWS DynamoDB尝试添加到集合中-操作数不正确
EN

Stack Overflow用户
提问于 2016-06-02 09:51:54
回答 2查看 8.8K关注 0票数 7

我正在创建一个使用Nodejs和DynamoDB作为后端的API。我正在尝试更新一个项目,以添加到一组“朋友”。当我更新用户时,我得到错误,“无效的UpdateExpression:操作符或函数的操作数类型不正确;操作符:添加,操作数类型:映射”。我的理解是,当添加到一个不存在的集合时,该集合将被创建。如果它已经存在,则应该将新值添加到集合中。我不明白为什么我尝试添加的集合被读取为映射。

用户是如何创建的:

代码语言:javascript
运行
复制
var params = {
    TableName: "users",
    Item:{
        "id": Number(id),
        "name": name,
        "password": password
    }
};

documentClient.put(params, function(err, data) {
    if(err)
        res.json(500, err);
    else
        res.json(200, data);
});

如何添加好友:

代码语言:javascript
运行
复制
var params = {
    TableName: "users",
    Key: {
        "id": id
    },
    UpdateExpression: "ADD friends :friendId",
    ExpressionAttributeValues: {
        ":friendId": { "NS": [friendId] }
    },
    ReturnValues: "UPDATED_NEW"
};

documentClient.update(params, function(err, data) {
    if(err)
        res.json(500, err);
    else
        res.json(200, data);
});
EN

回答 2

Stack Overflow用户

发布于 2016-08-16 03:30:33

这个问题在这里有答案

https://stackoverflow.com/a/38960676/4975772

下面是为满足您的问题而格式化的相关代码

代码语言:javascript
运行
复制
let AWS = require('aws-sdk');
let docClient = new AWS.DynamoDB.DocumentClient();

...

var params = {
    TableName : 'users',
    Key: {'id': id},
    UpdateExpression : 'ADD #friends :friendId',
    ExpressionAttributeNames : {
      '#friends' : 'friends'
    },
    ExpressionAttributeValues : {
      ':friendId' : docClient.createSet([friendId])
    },
    ReturnValues: 'UPDATED_NEW'
};

docClient.update(params, callback);

如果该集合不存在,则该代码将为您创建它。您还可以使用不同的set运行该代码,以更新set的元素。超级方便。

票数 9
EN

Stack Overflow用户

发布于 2016-06-02 15:43:12

以下是工作代码。你不需要在这里添加。只需使用"set friends = :friendId“,因为表中不存在好友属性(即,在更新之前,表中只有id、姓名和密码)。作为更新的一部分,新添加了friend属性。

代码语言:javascript
运行
复制
var docClient = new AWS.DynamoDB.DocumentClient();
var table = "users";
var userid = 1;
var friendId = [123];
var params = {
TableName : table,
Key: {
    "id" : userid
},
"UpdateExpression": "set friends = :friendId",
"ExpressionAttributeValues": { 
    ":friendId": {"NS": friendId}
},
"ReturnValues" : "UPDATED_NEW"
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37581422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档