node.js - 更新子文档不起作用nodejs mongodb express

标签 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

最佳答案

在您的查询中,您必须使用 {_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)} ...

关于node.js - 更新子文档不起作用nodejs mongodb express,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36720145/

相关文章:

node.js - 502 Bad Gateway 在 Elastic Beanstalk 上部署 Express Generator 模板

node.js - fuse .js : How to return an exact match when there are two words to search for?

node.js - 检索属于 HTTP 请求的 socket.io 连接

MongoDB 等于

node.js - 如何计算 Node 内 MongoDB 集合中的文档数量?

javascript - did() 是否完成与 Javascript Promise 中的 catch() 相同的事情(使用sequelize 和 bluebird)?

javascript - 如何将数据从服务器发送回浏览器?

javascript - Node.js:如何创建 XML 文件

javascript - Node gzip 将文件解压缩到变量中

python - mongodb 连接字符串 uri 在 Kubernetes 中不起作用