首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.updateOne on MongoDB不工作于Node.js

.updateOne on MongoDB不工作于Node.js
EN

Stack Overflow用户
提问于 2017-12-05 14:54:37
回答 9查看 77.4K关注 0票数 37

我有以下代码:

代码语言:javascript
运行
复制
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,这是否是一个问题?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2017-12-05 15:00:53

也许您应该在更新查询中使用"$set“,如下所示:

代码语言:javascript
运行
复制
{$set: {"name": req.body.name}}, // Update

文档中的更多信息

编辑

如果它不能工作,这可能是因为你的过滤器没有匹配。

也许您应该尝试与这样的ObjectId匹配:

代码语言:javascript
运行
复制
var ObjectID = require('mongodb').ObjectID;

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

希望能帮上忙。

票数 67
EN

Stack Overflow用户

发布于 2017-12-05 15:14:11

使用{$set: {"name": req.body.name}} (正如Sparw提到的那样)更新文档中您想要的属性。另外,如果您作为参数传递的id在集合中不存在(您希望使用相同的id创建一个id),则可以将其作为第三个参数{upsert: true}传递以创建一个参数。

在你的例子中:

代码语言:javascript
运行
复制
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);
      }) })
票数 9
EN

Stack Overflow用户

发布于 2019-12-22 21:55:39

正确的语法是:

代码语言:javascript
运行
复制
monDb.collection.updateOne(
    {"_id": ObjectId(req.params.id)}, 
    { $set: updateDoc }, 
    function(err, doc) {
      ...
    }
);

更新:不是ObjectID,而是ObjectId

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47656515

复制
相关文章

相似问题

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