NodeJS 和 MongoDB FindAndModify() 需要删除或更新

Posted

技术标签:

【中文标题】NodeJS 和 MongoDB FindAndModify() 需要删除或更新【英文标题】:NodeJS and MongoDB FindAndModify() need remove or update 【发布时间】:2014-08-11 02:50:12 【问题描述】:

我正在尝试使用 nodejS 在 mongodb 中执行 findAndModify,这是我的代码:

var nextBill = function (db, success, log) 
    var collection = db.collection('autoincrements');
    log.debug('autoIncrementRepository', 'nextBill');
    var result = collection.findAndModify(
        query:  _id: 'auto' ,
        update:  $inc:  bill: 1  ,
        new: true
    );

    success(result.bill);
;

编辑:

尝试回调

collection.findAndModify(
        query:  _id: 'auto' ,
        update:  $inc:  bill: 1  ,
        new: true
    , function (e, result) 
        success(result.budget);
    );

但是给我错误需要删除或更新..但我正在这样做..

【问题讨论】:

您使用的是哪个驱动程序? MongoDB节点原生驱动需要回调,mongoose、mongoose等也需要回调。 本机驱动程序,但使用回调我得到同样的错误:。我将使用我的实际代码编辑我的 awnser。 【参考方案1】:

试试这个它在 nodejs 中对我有用

users.findAndModify(
            "_id": userid,"password":pwd,
           [['_id', 'asc']],
            "$set":"password":npwd,
           "upsert":false
        ,function(err,result)
        //enter code here

    )

【讨论】:

【参考方案2】:

节点原生驱动实现中的.findAndModify()方法与mongo shell实现不同。要进行上述更新:

collection.findAndModify(
    "_id": "auto" ,
    "$inc":  "bill": 1  ,
   function(err,doc) 
     // work here

   
);

有点奇怪地删除了您在选项中指定的内容,因此同样会“删除”匹配的文档:

collection.findAndModify(
    "_id": "auto" ,
    "$inc":  "bill": 1  ,
    "remove": true ,
   function(err,doc) 
     // work here

   
);

主要区别在于您没有为操作命名“关键”部分。

【讨论】:

感谢这项工作,但为什么它们与外壳规范/文档所说的不同?? @Aodh shell 规范不是驱动程序实现的规范。您正在阅读的文档是针对 mongo 本身的,而不是针对驱动程序的。阅读此处的驱动程序文档:mongodb.github.io/node-mongodb-native 嗨,我仍然收到错误,这是我的代码 db.collection(nextIDCollection).findAndModify("_id":1,$inc: "nextID":1 ,function (错误,文档));我找不到代码有什么问题。【参考方案3】:
Hi I have followed this and it worked perfectly.

db.collection('test').findAndModify(
  hello: 'world', // query
  [['_id','asc']],  // sort order
  $set: hi: 'there', // replacement, replaces only the field "hi"
  , // options
  function(err, object) 
      if (err)
          console.warn(err.message);  // returns error if no matching object found
      else
          console.dir(object);
      
  );
);

【讨论】:

【参考方案4】:

http://mongodb.github.io/node-mongodb-native/2.0/api/Collection.html#findAndModify

上面的文档指定第二个参数是排序顺序,用于在多个文档匹配查询时选择使用哪个文档。仅提供两个参数将导致“需要删除或更新”错误消息。

collection('MyCollection').findAndModify(
     _id: "auto" ,
    [],
     $inc:  "bill": 1  ,
     upsert: true, new: true ,
    function(err,doc) 
       // work here
    
);

【讨论】:

以上是关于NodeJS 和 MongoDB FindAndModify() 需要删除或更新的主要内容,如果未能解决你的问题,请参考以下文章

使用 MongoDB 和 Nodejs 插入和查询日期

使用 Angular 2 服务、mongoDB 和 NodeJs 编辑对象

mongoDB 和 nodeJs 无法正确处理并发请求

使用mongodb在nodejs中使用锁定/事务读取和插入文档

使用mongodb在nodejs中使用锁定/事务读取和插入文档

NodeJS 和 MongoDB FindAndModify() 需要删除或更新