Możesz użyć insertMany()
metoda tutaj, jeśli używasz najnowszej wersji Mongoose 4.4.X
i większe, które zasadniczo używają Model.collection.insertMany()
pod maską, a sterownik może obsłużyć zrównoleglenie >= 1000
dokumenty dla Ciebie.
myData = [Obj1, Obj2, Obj3.......];
Collection1.insertMany(myData, function(error, docs) {});
lub używanie obietnic do lepszej obsługi błędów
Collection1.insertMany(myData)
.then(function(docs) {
// do something with docs
})
.catch(function(err) {
// error handling here
});
Działa poprzez tworzenie wielu dokumentów, wywołuje .validate()
na nich równolegle, a następnie wywołuje insertMany()
w wyniku toObject({ virtuals: false });
każdego dokumentu.Chociaż insertMany()
nie wyzwala zaczepów przed zapisem, ma lepszą wydajność, ponieważ wykonuje tylko 1 podróż w obie strony do serwera zamiast 1 dla każdego dokumentu.
Dla wersji Mongoose ~3.8.8, ~3.8.22, 4.x
które obsługują serwer MongoDB >=2.6.x
, możesz użyć Bulk API
w następujący sposób
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
});
}