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)будет вызываться после того, как все документы будут сохранены или возникнет ошибка. В случае успеха 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);
}
}
Обновление 2019-06-22 : хотя insert()его все еще можно использовать нормально, оно устарело в пользу insertMany(). Параметры точно такие же, поэтому вы можете просто использовать его как замену, и все должно работать нормально (ну, возвращаемое значение немного другое, но вы, вероятно, все равно его не используете).
Ссылка