Es posible que desee utilizar insertMany()
método aquí si está utilizando la última versión de Mongoose 4.4.X
y superior, que esencialmente usa Model.collection.insertMany()
debajo del capó y el conductor podría manejar la paralelización >= 1000
documentos para usted.
myData = [Obj1, Obj2, Obj3.......];
Collection1.insertMany(myData, function(error, docs) {});
o usando Promises para un mejor manejo de errores
Collection1.insertMany(myData)
.then(function(docs) {
// do something with docs
})
.catch(function(err) {
// error handling here
});
Funciona creando un montón de documentos, llama a .validate()
en ellos en paralelo, y luego llama al controlador subyacente insertMany()
en el resultado de toObject({ virtuals: false });
de cada documento. Aunque insertMany()
no activa ganchos de guardado previo, tiene un mejor rendimiento porque solo hace 1 viaje de ida y vuelta al servidor en lugar de 1 para cada documento.
Para las versiones de Mongoose ~3.8.8, ~3.8.22, 4.x
que admiten MongoDB Server >=2.6.x
, puede usar la Bulk API
de la siguiente manera
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
});
}