MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Masseneinfügung in MongoDB mit Mongoose

Möglicherweise möchten Sie insertMany() verwenden -Methode hier, wenn Sie die neueste Mongoose-Version 4.4.X verwenden und höher, das im Wesentlichen Model.collection.insertMany() unter der Haube und der Treiber könnte die Parallelisierung von >=1000 handhaben Dokumente für Sie.

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

oder Verwendung von Promises für eine bessere Fehlerbehandlung

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

Es funktioniert, indem es eine Reihe von Dokumenten erstellt und .validate() aufruft auf ihnen parallel und ruft dann den insertMany() auf das Ergebnis von toObject({ virtuals:false }); jedes Dokuments. Obwohl insertMany() löst keine Pre-Save-Hooks aus, es hat eine bessere Leistung, da es nur 1 Hin- und Rückweg zum Server macht, anstatt 1 für jedes Dokument.

Für Mongoose-Versionen ~3.8.8, ~3.8.22, 4.x die MongoDB Server >=2.6.x unterstützen , können Sie die Bulk-API verwenden wie folgt

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