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

マングースを使用したMongoDBへの一括挿入

    insertMany()を使用することをお勧めします 最新のMongooseバージョン4.4.Xを使用している場合は、ここでメソッドを実行します 以上。基本的に Model.collection.insertMany() 内部的には、ドライバーは並列化を処理する可能性があります> =1000 あなたのためのドキュメント。

    myData = [Obj1, Obj2, Obj3.......];
    Collection1.insertMany(myData, function(error, docs) {});
    

    または、エラー処理を改善するためにPromisesを使用する

    Collection1.insertMany(myData)
        .then(function(docs) {
             // do something with docs
        })
        .catch(function(err) {
            // error handling here
        });
    

    これは、一連のドキュメントを作成することで機能し、 .validate()を呼び出します。 それらを並行して実行し、基になるドライバーの insertMany() toObject({virtuals:false});の結果について 各ドキュメントの 事前保存フックをトリガーしません。ドキュメントごとに1回ではなく、サーバーへのラウンドトリップが1回だけであるため、パフォーマンスが向上します。

    Mongooseバージョンの場合〜3.8.8、〜3.8.22、4.x MongoDBサーバーをサポートする>=2.6.x Bulk APIを使用できます 次のように

    var bulk = Collection1.collection.initializeOrderedBulkOp(),
        counter = 0;
    
    myData.forEach(function(doc) {
        bulk.insert(doc);
    
        counter++;
        if (counter % 500 == 0) {
            bulk.execute(function(err, r) {
               // do something with the result
               bulk = Collection1.collection.initializeOrderedBulkOp();
               counter = 0;
            });
        }
    });
    
    // Catch any docs in the queue under or over the 500's
    if (counter > 0) {
        bulk.execute(function(err,result) {
           // do something with the result here
        });
    }
    


    1. 流星開発で外部mongodbを使用する

    2. データストアとしてRedisを使用したアプリケーションの設計。何?なんで?

    3. $elemMatchと更新

    4. DoctrineとMongoDBを使用したアレイの保存