Du vil måske bruge insertMany()
metode her, hvis du bruger den seneste Mongoose-version 4.4.X
og større, som i det væsentlige bruger Model.collection.insertMany()
under motorhjelmen og føreren kan håndtere parallelisering af >= 1000
dokumenter til dig.
myData = [Obj1, Obj2, Obj3.......];
Collection1.insertMany(myData, function(error, docs) {});
eller ved at bruge Promises for bedre fejlhåndtering
Collection1.insertMany(myData)
.then(function(docs) {
// do something with docs
})
.catch(function(err) {
// error handling here
});
Det virker ved at oprette en masse dokumenter, kalder .validate()
på dem parallelt, og kalder derefter den underliggende drivers insertMany()
på resultatet af toObject({ virtuals: false });
af hvert dokument. Selvom insertMany()
udløser ikke pre-save hooks, den har bedre ydeevne, fordi den kun foretager 1 rundrejse til serveren i stedet for 1 for hvert dokument.
For Mongoose-versioner ~3.8.8, ~3.8.22, 4.x
som understøtter MongoDB Server >=2.6.x
, kan du bruge Bulk API
som følger
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
});
}