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