Você pode tentar o async módulo para isso. Ele possui alguns métodos muito úteis para processar cada item em uma coleção e oferece funcionalidade para quando todo o processamento for concluído.
Refiro-me em particular à fila função, que permite adicionar tarefas a uma fila e, depois que todos os itens forem processados, faça algo.
Por exemplo, você pode fazer algo como:
var q = async.queue(function(task, callback) {
// task.doc would contain your individual doc to process
// your insert / update logic goes here...
// Callback signifies you're done with this task
callback();
}, 2) // <--- this number specifies the number of tasks to run in parallel
q.drain = function() {
// this is the queue's callback, called when the queue is empty,
// i.e. when all your documents have been processed.
res.send(statusCode, message);
}
Então, se presumirmos que você tem sua lista de documentos em uma variável chamada docs , tudo o que você precisa fazer para processá-los é empurrá-los para a fila.
for (var doc in docs) {
q.push({ doc: docs[doc] }, function(err) {
if (err) console.log(err);
})
}
Dica:você precisa enviar um objeto contendo o documento na fila. Há um erro estranho se você tentar passar um objeto desempacotado.
Agora, se você quiser os status específicos para cada documento que você processa no Mongo, isso é totalmente possível assim. Contanto que você tenha instanciado uma estrutura de dados fora da fila, você pode adicionar statusCodes (etc.) a ela à medida que cada item é processado e enviar a estrutura para o cliente no dreno da fila função. Não deve ser muito incômodo.