2013-11-09 2 views
0

У меня возникла проблема с методом mongoose Model.create.Model.create не работает на очень большом массиве документов

Когда я называю

Model.create(arrayOfThousandDocs, function(err){}); 

Через 15 мин (достаточно для всех документы, чтобы спастись), когда я перейти на Монго оболочки и запрос на общее количество документации сохранены

тогда я нашел только что-то около 700-800 (ни один из сохраненных документов не меняется при каждом вызове Model.create).

И mongoose or mongo не возвращает никаких ошибок.

Есть ли у кого-то такая же ошибка? Пожалуйста, скажите мне, как его решить.

+0

Это должно работать нормально. Включите ведение журнала отладки Mongoose, чтобы узнать, что происходит во время вызова, добавив 'mongoose.set ('debug', true);' к вашему коду. – JohnnyHK

ответ

0

это может быть потому, Model.create использует метод ForEach, и что не подходит в nodejs асинхронный режим программирования .. Пожалуйста, поправьте меня, если я, если я ошибаюсь ..

и предложить свои взгляды ..

вот что источник: http://mongoosejs.com/docs/api.html#model_Model.create

+0

Нет ничего по своей сути неправильно использовать 'forEach' в контексте async; Я думаю, что проблема здесь в том, что 'Model.create' не подходит для массовой экономии тысяч документов. Вероятно, вы должны разделить свой набор данных партиями в размере не более 100 документов или использовать драйвер MongoDB напрямую, а не идти через Mongoose. – robertklep

+0

Почему нужно ограничивать 100.? и, кстати, со 100, я получаю 80-90 сохраненных записей из оболочки mongo. – codeofnode

+1

Хранение 1500 простых документов с использованием 'Model.create()' отлично работает для меня, все они попадают в базу данных. По-видимому, это связано с вашей настройкой или типом документов, которые вы сохраняете. – robertklep

Смежные вопросы