Potresti voler utilizzare insertMany()
metodo qui se stai utilizzando l'ultima versione di Mongoose 4.4.X
e superiore, che utilizza essenzialmente Model.collection.insertMany()
sotto il cofano e il driver potrebbe gestire la parallelizzazione di >= 1000
documenti per te.
myData = [Obj1, Obj2, Obj3.......];
Collection1.insertMany(myData, function(error, docs) {});
o utilizzando Promise per una migliore gestione degli errori
Collection1.insertMany(myData)
.then(function(docs) {
// do something with docs
})
.catch(function(err) {
// error handling here
});
Funziona creando un mucchio di documenti, chiama .validate()
su di essi in parallelo, quindi chiama il driver sottostante insertMany()
sul risultato di toObject({ virtuals: false });
di ogni documento.Anche se insertMany()
non attiva hook di pre-salvataggio, ha prestazioni migliori perché effettua solo 1 andata e ritorno al server anziché 1 per ogni documento.
Per le versioni di Mongoose ~3.8.8, ~3.8.22, 4.x
che supportano MongoDB Server >=2.6.x
, puoi utilizzare l'Bulk API
come segue
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
});
}