async を試してみてください。 このためのモジュール。コレクション内の各アイテムを処理するための非常に便利な方法がいくつかあり、すべての処理が終了したときの機能を提供します。
特に
たとえば、次のようなことを行うことができます:
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);
}
次に、 docsという名前の変数にドキュメントのリストがあると仮定した場合 、それらすべてを処理するために必要なのは、それらをキューにプッシュすることだけです。
for (var doc in docs) {
q.push({ doc: docs[doc] }, function(err) {
if (err) console.log(err);
})
}
ヒント:含むオブジェクトをプッシュする必要があります ドキュメントをキューに入れます。ラップされていないオブジェクトを渡そうとすると、奇妙なエラーが発生します。
さて、Mongoで処理する各ドキュメントに特定のステータスが必要な場合、これはこのように完全に可能です。キューの外部でデータ構造をインスタンス化する限り、各アイテムが処理されるときにstatusCodes(など)を追加し、キューのドレインでクライアントに構造を送信できます。 関数。あまり面倒なことはありません。