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

マングースを使用したMongoDBでの一括アップサート

    特に「マングース」ではないか、少なくとも執筆時点ではまだです。 2.6リリース以降のMongoDBシェルは、すべての一般的なヘルパーメソッドの場合と同様に、実際には「内部」で「バルク操作API」を使用します。その実装では、最初にこれを実行しようとします。古いバージョンのサーバーが検出された場合、レガシー実装への「フォールバック」があります。

    すべてのマングースメソッドは、「現在」、「レガシー」実装または書き込み懸念応答と基本的なレガシーメソッドを使用します。ただし、.collectionがあります マングース自体が実装されている基盤となる「ノードネイティブドライバー」から「コレクションオブジェクト」に本質的にアクセスする、任意のマングースモデルからのアクセサー:

     var mongoose = require('mongoose'),
         Schema = mongoose.Schema;
    
     mongoose.connect('mongodb://localhost/test');
    
     var sampleSchema  = new Schema({},{ "strict": false });
    
     var Sample = mongoose.model( "Sample", sampleSchema, "sample" );
    
     mongoose.connection.on("open", function(err,conn) { 
    
        var bulk = Sample.collection.initializeOrderedBulkOp();
        var counter = 0;
    
        // representing a long loop
        for ( var x = 0; x < 100000; x++ ) {
    
            bulk.find(/* some search */).upsert().updateOne(
                /* update conditions */
            });
            counter++;
    
            if ( counter % 1000 == 0 )
                bulk.execute(function(err,result) {             
                    bulk = Sample.collection.initializeOrderedBulkOp();
                });
        }
    
        if ( counter % 1000 != 0 )
            bulk.execute(function(err,result) {
               // maybe do something with result
            });
    
     });
    

    「マングースメソッド」は、接続が実際にはまだ確立されていない可能性があることを実際に認識しており、これが完了するまで「キュー」に入れます。 「掘り下げている」ネイティブドライバーは、この区別をしません。

    したがって、接続が何らかの方法または形式で確立されていることを実際に認識しておく必要があります。ただし、実行していることに注意している限り、ネイティブドライバメソッドを使用できます。



    1. REDISハッシュのキーに複数の値を追加するクエリを作成しますか?

    2. Mongoose.jsは、1回のconnect()呼び出しからMongoDBへの複数の接続を作成します

    3. ノードredisパブリッシャーがメモリを消費しすぎています

    4. doRedisは、異なるRedisサーバービルドのWindows8x64でエラーを返します