Model.create() срещу Model.collection.insert():по-бърз подход
Model.create()
е лош начин да правите вмъквания, ако имате работа с много голям обем. Ще бъдемного бавно . В този случай трябва да използвате Model.collection.insert
, който се представя много по-добре . В зависимост от размера на групата, Model.create()
дори ще се срине! Пробвах с милион документи, без успех. Използване на Model.collection.insert
отне само няколко секунди.
Model.collection.insert(docs, options, callback)
docs
е масивът от документи, които трябва да се вмъкнат;options
е незадължителен конфигурационен обект - вижте документитеcallback(err, docs)
ще бъде извикан, след като всички документи бъдат запазени или възникне грешка. При успех документите са масивът от постоянни документи.
Както авторът на Mongoose посочва тук, този метод ще заобиколи всички процедури за валидиране и ще има директен достъп до драйвера на Mongo. Това е компромис, който трябва да направите, тъй като боравите с голямо количество данни, в противен случай изобщо няма да можете да ги вмъкнете в базата си данни (не забравяйте, че тук говорим за стотици хиляди документи).
Прост пример
var Potato = mongoose.model('Potato', PotatoSchema);
var potatoBag = [/* a humongous amount of potato objects */];
Potato.collection.insert(potatoBag, onInsert);
function onInsert(err, docs) {
if (err) {
// TODO: handle error
} else {
console.info('%d potatoes were successfully stored.', docs.length);
}
}
Актуализация 22.06.2019 :въпреки че insert()
все още може да се използва добре, вече е отхвърлен в полза на insertMany()
. Параметрите са абсолютно същите, така че можете просто да го използвате като замяна и всичко трябва да работи добре (е, връщаната стойност е малко по-различна, но вероятно не я използвате така или иначе).
Справка
- Документация на Mongo
- Aaron Heckman в Google Groups, обсъждайки групови вмъквания