删除多个文档并将其传递给回调

时间:2014-03-01 11:51:07

标签: javascript node.js mongodb express mongoose

我正在尝试找到删除多个文档的正确方法,之后可以访问它们。

要使用一个文档实现这一目标,您可以使用findByIdAndRemovefindOneAndRemove将已找到的文档传递给回调。但是我没有找到任何方法来完成多个文档。所以这是我目前的解决方案:

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

  })
})

我想知道是否有更好的方法来做到这一点?谢谢!

1 个答案:

答案 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#parallelhttp://mongoosejs.com/docs/api.html#model_Model-remove

P.S。您可以用原生Array.prototype.forEach替换下划线。