我是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;
按如下方式解决问题:
使用find()
,limit()
和exec()
方法检索20个自拍。一旦我有了这些自拍,我就可以使用forEach()
和update()
来迭代并将每个 sent_mod 更新为0.但是这种方法会执行20次更新操作。我认为可能有更好的方法来做到这一点。我从MongoDB文档中了解了findAndUpdate()
,发现Mongoose有各种方法,如findOne()
,findOneAndUpdate()
。但我也找不到使用这些方法解决问题的更好方法。
# 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;
修改
解决方案(由gtsouk建议):
# 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;
答案 0 :(得分:1)
模型update()
方法可以更新多个文档,但没有限制参数(据我所知)。您可以尝试仅更新从find()
操作中获得的ID。创建一个数组,放入要更新的每个记录的_id,然后使用
Selfies.update({_id: {$in: array_with_ids}}, {$set:{mod_count:0}}, {multi: true});