mongoose,nodejs如何将项添加到mongo数组中

时间:2017-03-19 20:40:16

标签: node.js mongodb mongoose

我有一个喜欢的系列 { ID: “david123” 朋友[{id:joe321,lname“woo”,fname“joe”}] }

我想在朋友中添加新元素

我目前有这个,但它似乎没有工作

app.post('/users/:uid/friends', function(req, res){
  var userId = req.params.uid;
  Friend.update({'_id': userId},
    {$push: {Friends: req.body.friend}},
    { upsert : true },
    function(err, result){
      if (err){
    console.log(err);
  } else {
    res.status(200).json(result);
  }
  })
});

我像这样定义了我的架构

var FriendSchema = new mongoose.Schema({
  _id: String,
  Friends: [{
    _id: String,
    fname: String,
    lname: String
  }]
});

当我发出请求时,我发送 {朋友:'{userId:“john123”,lname“smoth”,fname“john”}',   userId:'userId123'}即时通讯 [TypeError:不能使用'in'运算符来搜索{userId:“john123”中的'_id',lname“smoth”,fname“john”}}

1 个答案:

答案 0 :(得分:0)

句子"它似乎没有工作" 告诉我们什么,真的。打印有错误吗?是否插入了错误的数据?没有数据?对HTTP请求的响应是什么?这些是最重要的问题,但由于没有提供相关信息,我只能给你一些提示:

  1. 确保与Mongo的连接成功
  2. 确保您已连接到您认为自己
  3. 的数据库
  4. 确保在需要时使用正确编码的正文解析器
  5. 确保使用$ addToSet而不是$ push来避免重复
  6. 确保在错误时返回响应,而不仅仅是成功
  7. 确保使用带有JSON内容类型
  8. 的POST方法发送请求
  9. 确保您在请求正文中发送数据
  10. 确保请求中的JSON包含friend属性
  11. 确保您有一些请求记录
  12. 对于(3),请参阅:https://github.com/expressjs/body-parser#bodyparserjsonoptions

    对于(4),请参阅:https://docs.mongodb.com/manual/reference/operator/update/addToSet/

    您没有对您使用的框架发表任何意见,而您没有使用框架标记提出问题,但您的代码表明您可能正在使用Express。如果是这种情况,那么在请求处理程序中使用req.body则需要使用正确的正文解析器中间件:

    npm install body-parser --save
    

    并在您的代码中 - 开头:

    const bodyParser = require('body-parser');
    

    在您需要appapp.post(...);之后的某个地方:

    app.use(bodyParser.json());
    

    如果您希望将请求正文解析为JSON,那么您可以在处理程序中使用req.bodyreq.body.friend

    在请求处理程序中使用一些基本的日志记录:

    app.post('/users/:uid/friends', (req, res) => {
        // start with:
        console.log('Request body:' JSON.stringify(req.body));
        // the rest of the logic ...
    });
    

    查看响应中实际传递的内容,并通过适当的主体解析器正确反序列化。