sql >> データベース >  >> NoSQL >> MongoDB

Node.js、MongoDB-複数のドキュメントの挿入/更新と単一の応答の送信

    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(など)を追加し、キューのドレインでクライアントに構造を送信できます。 関数。あまり面倒なことはありません。




    1. mongodbをインポートするための区切り文字を定義する方法

    2. KoyebにMongoDBAtlasとApolloServerを使用してGraphQLAPIをデプロイします

    3. PHPの致命的なエラー:クラス'MongoDate'が見つかりません

    4. AzureRedisキャッシュ-GET呼び出しのタイムアウト