如何获得在MongoDB与mongoosefindAndModify func的返回值?

我正在使用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+Command

我相信你的callback将需要两个参数,如: function(err, result){

当callback被触发时, result应该包含新文档(如果err为空)。

我检查了和尚的源代码,并最终做到了这一点。 即使是代码文档也是如此,但是从僧侣的文档中看不到。

 /** * 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函数。