如何使用mongoose获取MongoDB中findAndModify函数的返回值

how to get the return value of findAndModify func in MongoDB with mongoose?

本文关键字:findAndModify 函数 返回值 MongoDB 何使用 mongoose 获取      更新时间:2023-09-26

我使用Node.js+mongoose+MongoDB,如下所示:

SomeModelSchema.statics.findAndModify = function (query, sort, doc, options, callback) {
    return this.collection.findAndModify(query, sort, doc, options, callback);
};
SomeModel.findAndModify({}, [], { $inc: { amount: 1 } }, {}, function (err) {
    if (err) throw err;
});

我可以成功地增加amount,但我想在不进行再次查询的情况下获得amount的新值。有办法做到这一点吗?

options对象中指定{new:true}。这将导致findAndModify的结果值成为应用更新后的文档,然后您可以从中读取amount的新值。

详细信息如下表所示:http://www.mongodb.org/display/DOCS/findAndModify+命令

我认为您的回调需要接受两个参数,如:function(err, result){

当触发回调时,result应该包含新文档(如果err为null)。

我检查了monk的源代码,并最终使其工作。甚至代码文档也说明了它应该是什么样子,但从monk的网站上的文档中看不到它。

/**
 * findAndModify
 *
 * @param {Object} search query, or { query, update } object
 * @param {Object} optional, update object
 * @param {Object|String|Array} optional, options or fields
 * @param {Function} callback
 * @return {Promise}
 * @api public
 */

这意味着您可以将查询更新指定为单独的参数,再加上选项作为第三个参数:

notescollection.findAndModify(
  { "_id": id },
  { "$set": { 
      "title": title,
      "content": content
  }},
  { "new": true, "upsert": true },
  function(err,doc) {
    if (err) throw err;
    console.log( doc );
  }
);

或者,您可以将查询更新指定为第一个参数的字段,再加上选项作为第二个参数:

notescollection.findAndModify(
  {
    "query": { "_id": id },
    "update": { "$set": { 
        "title": title,
        "content": content
    }}
  },
  { "new": true, "upsert": true },
  function(err,doc) {
    if (err) throw err;
    console.log( doc );
  }
);

有关源代码的更多信息,请查看collections.js文件中的findAndModify函数。