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()
. Параметры точно такие же, поэтому вы можете просто использовать его как замену, и все должно работать нормально (ну, возвращаемое значение немного другое, но вы, вероятно, все равно его не используете).
Ссылка