更新子文档不工作nodejs mongodb express

时间:2016-04-19 13:37:57

标签: node.js mongodb express

我有这个终点:

restaRouter.route('/lists/:id/')
    .post(function(req, res) {
        db.Restaurant.update({_id: req.params.id}, { $push: { reviews: req.body }}, function(err, doc) {
            if (err) {
                res.send(err);
            }
            res.json(doc);
        })
    });

当我发帖时,应该使用_id找到这样的文档。 _id是动态生成的:

{
  "_id": "571616e420cac41111e90ecf",
  "title": "Yep",
  "address": "Somewhere",
  "about": "Everything",
  "reviews": [
    {
      "name": "My name",
      "email": "email@gmail.com",
      "message": "My message"
    }
  ]
}

并将项目作为子文档推送到评论字段。

req.body看起来像这样:

{
    "name": "foo",
    "email": "foo@bar.com",
    "message": "myFoo bar"
}

我知道json对象是什么击中了端点?是。 console.log(req.body)确认。

目前,当我发帖时,我得到的回复是

{
  "ok": 1,
  "nModified": 0,
  "n": 0
}

当时没有修改任何内容。我究竟做错了什么?我怀疑它与此有什么关系,但我使用的是mongojs

1 个答案:

答案 0 :(得分:3)

在您的查询中,您必须使用{_id:ObjectId('myobectID')}

所以用你的例子来说:

db.Restaurant.update({_id: ObjectId(req.params.id)}, { $push: { reviews: req.body }}, function(err, doc) {
...
}

mongojs具体

由于OP提及mongojs,上述内容可以通过以下方式完成:

db.Restaurant.update({_id: mongojs.ObjectId(req.params.id)} ...