MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zbiorcze upsert w MongoDB przy użyciu mongoose

Nie konkretnie „mangusta”, a przynajmniej jeszcze nie w chwili pisania. Powłoka MongoDB od wydania 2.6 faktycznie używa "interfejsu API operacji zbiorczych" "pod maską", tak jak w przypadku wszystkich ogólnych metod pomocniczych. W swojej implementacji najpierw próbuje to zrobić, a jeśli zostanie wykryty serwer starszej wersji, to istnieje „awaria” starszej implementacji.

Wszystkie metody mangusty „obecnie” wykorzystują „starszą” implementację lub odpowiedź na temat zapisu oraz podstawowe metody „legacy”. Ale jest .collection akcesor z dowolnego modelu mangusty, który zasadniczo uzyskuje dostęp do „obiektu kolekcji” z bazowego „natywnego sterownika węzła”, na którym sam jest zaimplementowany:

 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
        });

 });

Głównym haczykiem jest to, że "metody mangusty" są w rzeczywistości świadome, że połączenie może jeszcze nie zostać nawiązane i "kolejka", dopóki nie zostanie zakończone. Natywny sterownik, w którym się „zagłębiasz”, nie uwzględnia tego rozróżnienia.

Więc naprawdę musisz mieć świadomość, że połączenie jest nawiązywane w jakiś sposób lub w formie. Ale możesz używać natywnych metod sterowników, o ile uważasz na to, co robisz.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB, wykonanie zapytania za pomocą wyrażenia regularnego na polach indeksowanych

  2. Mongodb dopasowuje znaki akcentowane jako podstawowy znak

  3. MongoDB wybierz gdzie w tablicy _id?

  4. Wbudowana MongoDB podczas uruchamiania testów integracyjnych

  5. Relacje Mongo DB między obiektami