Може да искате да използвате insertMany()
метод тук, ако използвате най-новата версия на Mongoose 4.4.X
и по-голяма, която по същество използва Model.collection.insertMany()
под капака и драйверът може да се справи с паралелизирането >= 1000
документи за вас.
myData = [Obj1, Obj2, Obj3.......];
Collection1.insertMany(myData, function(error, docs) {});
или използване на Promises за по-добра обработка на грешки
Collection1.insertMany(myData)
.then(function(docs) {
// do something with docs
})
.catch(function(err) {
// error handling here
});
Работи чрез създаване на куп документи, извиква .validate()
върху тях паралелно и след това извиква insertMany()
върху резултата от toObject({ virtuals: false });
на всеки документ. Въпреки че insertMany()
не задейства куки за предварително записване, има по-добра производителност, защото прави само 1 двупосочно пътуване до сървъра, вместо 1 за всеки документ.
За версии на Mongoose ~3.8.8, ~3.8.22, 4.x
които поддържат MongoDB сървър >=2.6.x
, можете да използвате Bulk API
както следва
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
});
}