使用Mongoose更新Node.js中由find()方法返回的结果

我是Node.js的新手。 我的Node.js应用程序有一个名为Selfie的模型。

# model/selfie.js var mongoose = require('mongoose'), Schema = mongoose.Schema, selfieSchema = new Schema({ path: { type: String }, caption: { type: String }, sent_mod: { type: Number, default: -1 }, // -1 not sent, 0 sent, 1 accepted display_count: { type: Number, default: -1 }, // -1 not sent, 0 sent, 1 displayed time_stamp: { type: Date, default: new Date() } }), Selfie = mongoose.model('selfie', selfieSchema); module.exports = Selfie; 

我打破这个问题如下:

  1. 检索20个self_mod_sent是-1。
  2. 将那20个selfies的mod_count更新为0。

使用find()limit()exec()方法检索20个自拍。 一旦我有这些自拍,我可以使用forEach()update()迭代和更新每个sent_mod为0.但是这种方法执行更新操作20次。 我认为可能有更好的方法来做到这一点。 我从MongoDB文档中了解到findAndUpdate() ,发现Mongoose有各种方法,比如findOne()findOneAndUpdate() 。 但是我无法find一个更好的方法来解决我的问题也使用这些方法。

 # routes/selfie.js var express = require('express'), router = express.Router(), Selfie = require('../models/selfie'), mongoose = require('mongoose'); router.get('/moderate', function(req, res) { Selfie.find({ sent_mod: -1 }).limit(20).exec(function(err, selfies) { if(err) { console.log(err); return; } console.log(selfies); }); }); module.exports = router; 

编辑:
解决scheme (由gtsoukbuild议):

 # routes/selfie.py var express = require('express'), router = express.Router(), Selfie = require('../models/selfie'), mongoose = require('mongoose'); router.get('/moderate', function(req, res) { Selfie.find({ sent_mod: -1 }).limit(2).exec(function(err, selfies) { if(err) { console.log(err); return; } console.log(selfies); var selfieIds = selfies.map(function(selfie) { return selfie._id; }); console.log(selfieIds); Selfie.update({ _id: { $in: selfieIds } }, { $set: { sent_mod: 0 } }, { multi: true }, function(err, num) { if(err) { console.log(err); return; } console.log(num); }); }); }); module.exports = router; 

模型update()方法可以更新多个文档,但没有限制参数(据我所知)。 你可以尝试只更新从find()操作获得的id。 创build一个数组,把你想要更新的每个logging的_id,然后使用更新

 Selfies.update({_id: {$in: array_with_ids}}, {$set:{mod_count:0}}, {multi: true});