我正在尝试找到删除多个文档的正确方法,之后可以访问它们。
要使用一个文档实现这一目标,您可以使用findByIdAndRemove或findOneAndRemove将已找到的文档传递给回调。但是我没有找到任何方法来完成多个文档。所以这是我目前的解决方案:
Model.find({}, function(err, docs){
// do some stuff with docs
// like removing attached uploaded files (avatars, pictures, ...)
Model.remove({}, function(err, docs){
// here docs only return the deleted documents' count
// i'm unable to perform any kind of operations on docs
})
})
我想知道是否有更好的方法来做到这一点?谢谢!
答案 0 :(得分:2)
在这种情况下我使用异步和下划线模块。首先,我为异步创建任务数组,然后并行执行它们。例如 var async = require('async'); var _ = require('underscore');
Model.find({}, function(err, docs){
// do something
var tasks = [];
_.each(docs, function(doc){
tasks.push(function(callback){
doc.remove(function(err, removedItem){
callback(err, removedItem);
});
});
});
async.parallel(tasks, function(err, results){
// results now is an array of removedItems
});
});
请参阅https://github.com/caolan/async#parallel和http://mongoosejs.com/docs/api.html#model_Model-remove
P.S。您可以用原生Array.prototype.forEach替换下划线。