MongoDB 上的 .updateOne 在 Node.js 中不起作用

新手上路,请多包涵

我有以下代码:

 connection((db) => {
            db.collection('orders')
                .updateOne(
                    { "_id": req.body._id}, // Filter
                    {"name": req.body.name} // Update
                )
                .then((obj) => {
                    console.log('Updated - ' + obj);
                    res.redirect('orders')
                })
                .catch((err) => {
                    console.log('Error: ' + err);
                })
        })

我想更改订单中的名称,但它不会更新。控制台中的结果是

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

我试图阅读文档,但它太可怕了

编辑: {$set: {"name": req.body.name}}, 也没有用

编辑 2:传递的 ID 与数据库中的 _id 匹配。在数据库中它被称为“ObjectId(’5a42ja …‘)”时我正在查询纯文本 ID 可能是一个问题

原文由 Simeon Nakov 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 633
2 个回答

也许您应该像这样在更新查询中使用“$set”:

 {$set: {"name": req.body.name}}, // Update

文档 中的更多信息

编辑

如果它不起作用,这可能是因为与您的过滤器不匹配。

也许你应该尝试像这样匹配一个 ObjectId :

 var ObjectID = require('mongodb').ObjectID;

// In your request
{ "_id": ObjectID(req.body._id)}, // Filter

希望能帮助到你。

原文由 Sparw 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 {$set: {"name": req.body.name}} (如 Sparw 所述)更新文档中所需的属性。此外,如果您作为参数传递的 id 在集合中不存在(并且您想创建一个具有相同 id 的),您可以作为第三个参数传递 {upsert: true} 来创建一个。

在你的例子中:

 connection((db) => {
          db.collection('orders')
               .updateOne(
                  { "_id": req.body._id}, // Filter
                  {$set: {"name": req.body.name}}, // Update
                  {upsert: true} // add document with req.body._id if not exists

             )
            .then((obj) => {
               console.log('Updated - ' + obj);
              res.redirect('orders')
         })
        .catch((err) => {
           console.log('Error: ' + err);
      }) })

原文由 Dan Porat 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题