Du kanske vill prova async modul för detta. Den har några mycket användbara metoder för att bearbeta varje objekt i en samling, och erbjuder funktionalitet för när all bearbetning är klar.
Jag hänvisar dig särskilt till kön funktion, som låter dig lägga till uppgifter i en kö och sedan göra något när alla objekt har bearbetats.
Du kan till exempel göra något som:
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);
}
Sedan, om vi antar att du har din lista över dokument i en variabel som heter docs , allt du behöver göra för att bearbeta dem alla är att skjuta upp dem i kön.
for (var doc in docs) {
q.push({ doc: docs[doc] }, function(err) {
if (err) console.log(err);
})
}
Protip:du måste trycka på ett objekt som innehåller dokumentet i kön. Det uppstår ett konstigt fel om du försöker passera in ett olindat föremål.
Nu, om du ville ha de specifika statuserna för varje dokument du bearbetar i Mongo, är detta fullt möjligt så här. Så länge du instansierar en datastruktur utanför kön kan du lägga till statuskoder (etc.) till den när varje objekt bearbetas och skicka strukturen till klienten i köns avlopp fungera. Borde inte vara för mycket krångel.