2014-03-01 32 views
1

我試圖找到正確的方式來刪除多個文件,以後可以訪問它們。刪除多個文件,並將它們傳遞給回調

爲了實現與一個文件,你可以使用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

我在這種情況下使用異步和下劃線模塊。起初,我爲異步創建任務數組,然後並行執行它們。例如 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

附:你可以用本地Array.prototype.forEach替換下劃線。

+0

我還沒有理解它的每一點,但我不得不說你的解決方案非常有趣。我並不期待這種答案,更像是'findAllAndRemove'。但無論如何,謝謝! – inwpitrust

+0

不幸的是,沒有findAllAndSomething確實會非常有用。爲了模擬FindAll ...,你可以嘗試使用mapReduce而不需要reduce階段。但是,這聽起來有點可怕:) –

相關問題