Vous voudrez peut-être utiliser le insertMany()
méthode ici si vous utilisez la dernière version de Mongoose 4.4.X
et supérieur, qui utilise essentiellement Model.collection.insertMany()
sous le capot et le pilote peut gérer la parallélisation >= 1000
documents pour vous.
myData = [Obj1, Obj2, Obj3.......];
Collection1.insertMany(myData, function(error, docs) {});
ou en utilisant Promesses pour une meilleure gestion des erreurs
Collection1.insertMany(myData)
.then(function(docs) {
// do something with docs
})
.catch(function(err) {
// error handling here
});
Cela fonctionne en créant un tas de documents, appelle .validate()
sur eux en parallèle, puis appelle le pilote sous-jacent insertMany()
sur le résultat de toObject({ virtuals: false });
de chaque doc.Bien que insertMany()
ne déclenche pas de crochets de pré-enregistrement, il a de meilleures performances car il ne fait qu'un aller-retour vers le serveur au lieu d'un pour chaque document.
Pour les versions de Mongoose ~3.8.8, ~3.8.22, 4.x
qui prennent en charge MongoDB Server >=2.6.x
, vous pouvez utiliser l'Bulk API
comme suit
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
});
}