sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan bruger man uordnet bulk-indføring med Mongoskin?

Du kan gøre det, men du skal ændre dine opkaldskonventioner for at gøre dette, da kun "tilbagekald"-formularen faktisk vil returnere et samlingsobjekt, hvorfra .initializeUorderedBulkOp() metode kan kaldes. Der er også nogle brugsforskelle i forhold til, hvordan du tror, ​​at dette virker:

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

Så selve "Bulk"-metoderne kræver ikke tilbagekald og fungerer nøjagtigt som vist i dokumentationen. Undtagelsen er .execute() som faktisk sender erklæringerne til serveren.

Selvom driveren vil ordne dette lidt for dig, er det sandsynligvis ikke en god idé at stille for mange operationer i kø, før du kalder execute. Dette opbygges dybest set i hukommelsen, og selvom driveren kun sender batches på 1000 ad gangen (dette er en servergrænse, samt at hele batchen er under 16MB), vil du sandsynligvis have lidt mere kontrol her, i det mindste for at begrænse hukommelsesforbrug.

Det er pointen med modulo-testene som vist, men hvis hukommelse til opbygning af operationerne og et muligvis rigtig stort responsobjekt ikke er et problem for dig, så kan du bare blive ved med at stille operationer i kø og kalde .execute() én gang.

"Responsen" er i samme format som angivet i dokumentationen til BulkWriteResult.




  1. Redis vs. Memcached – 2021 Sammenligning

  2. Kompression i node.js

  3. MongoDB:Find minimumselementet i array og slet det

  4. Model.find().toArray() hævder ikke at have .toArray()-metoden