sql >> Database >  >> NoSQL >> MongoDB

Bulk invoegen in MongoDB met behulp van mangoest

Misschien wilt u de insertMany() gebruiken methode hier als u de nieuwste Mongoose-versie 4.4.X gebruikt en hoger, die in wezen Model.collection.insertMany() onder de motorkap en de bestuurder kan parallelliseren >=1000 documenten voor u.

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

of Promises gebruiken voor een betere foutafhandeling

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

Het werkt door een heleboel documenten te maken, roept .validate() . aan op hen in parallel, en roept vervolgens de onderliggende driver's insertMany() op het resultaat van toObject({ virtuals:false }); van elk document. Hoewel insertMany() activeert geen pre-save hooks, het heeft betere prestaties omdat het slechts 1 retour naar de server maakt in plaats van 1 voor elk document.

Voor Mongoose-versies ~3.8.8, ~3.8.22, 4.x die MongoDB Server >=2.6.x ondersteunen , kunt u de Bulk API gebruiken als volgt

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. Mongoid:hoe te zoeken naar alle objecten waarvan de waarde nul is?

  2. Zoek verschillende waarden groep door een ander veld mongodb

  3. MongoDB omgekeerde regex

  4. MongoError:ns niet gevonden wanneer verzameling wordt verwijderd