MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да използвате неподредено групово вмъкване с Mongoskin?

Можете да го направите, но трябва да промените конвенциите си за повикване, за да направите това, тъй като само формуляра за обратно извикване всъщност ще върне обект на колекция, от който .initializeUnorderedBulkOp() методът може да бъде извикан. Има и някои разлики в употребата на начина, по който смятате, че това работи:

var dbURI = urigoeshere;
var db = mongo.db(dbURI, {safe:true});
db.collection('collection',function(err,collection) {
    var bulk = collection.initializeUnorderedBulkOp();
    count = 0;

    for (var i = 0; i < 200000; i++) {
        bulk.insert({number: i});
        count++;

        if ( count % 1000 == 0 )
            bulk.execute(function(err,result) {
               // maybe do something with results
               bulk = collection.initializeUnorderedBulkOp(); // reset after execute
            });      

    });

    // If your loop was not a round divisor of 1000
    if ( count % 1000 != 0 )
        bulk.execute(function(err,result) {
          // maybe do something here
        });
});

Така че самите действителни "обемни" методи не изискват обратни извиквания и работят точно както е показано в документацията. Изключението е .execute() което всъщност изпраща изявленията до сървъра.

Докато драйверът ще подреди това донякъде вместо вас, вероятно не е добра идея да наредите твърде много операции на опашка, преди да извикате execute. Това основно се натрупва в паметта и въпреки че драйверът ще изпраща само партиди от 1000 наведнъж (това е ограничение на сървъра, както и цялата партида е под 16MB), вероятно искате малко повече контрол тук, поне за ограничаване на използването на паметта.

Това е смисълът на модулните тестове, както е показано, но ако паметта за изграждане на операциите и евентуално наистина голям обект за отговор не са проблем за вас, тогава можете просто да продължите да нареждате операциите на опашка и да извикате .execute() веднъж.

"Отговорът" е в същия формат, както е даден в документацията за BulkWriteResult.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - Актуализиране на обект във вложен масив

  2. Вмъкването на Mongodb/mongoose не е функция

  3. Множество групови операции, използващи рамката за агрегиране на Mongo

  4. MongoDB - Актуализиране или вмъкване на обект в масив

  5. Предотвратете дублиране на влизане с FOSUserBundle