Постараюсь быть кратким, насколько это возможно - Mongoose не кажется, чтобы сохранить записи, пока весь скрипт не заканчивается, даже если сохранить() часть называется асинхронно:Почему Mongoose не сохраняет записи по сценарию?
var reallyBigData = require('./data.json');
var importData = function(data) {
var newObj = new Obj; // Mongoose Object
newObj.x = data.x;
newObj.save();
};
this.on('importData', importData);
for(var i in reallyBigData) {
this.emit('importData', reallyBigData[i]);
};
Это грубое упрощение , Но ты получил идею. Когда я запускаю скрипт и запрашиваю Mongo, я не вижу никаких записей по мере запуска скрипта. Если я ограничу число, чтобы сказать, 30, и импортировать те, которые он заканчивает быстро, и я вижу записи позже.
Почему Mongoose не сохраняет каждую запись по мере выполнения скрипта?
Это интересно, я работал над проблемой, выбрасывая Mongoose и просто используя собственный драйвер. Мне интересно, делает ли Mongoose какое-то кэширование запросов. Я буду экспериментировать с ним больше, но казалось, что Mongoose не обрабатывал * никаких * запросов вставки до тех пор, пока не закончится большая петля. – James
@James Да, Mongoose выполняет очередь запросов, чтобы вы могли * вызывать * их синхронно и запускать их asynchrounously. Это одно возможное решение для «* callback hell *». Кроме того, собственный драйвер по-прежнему является асинхронным, и вы все равно должны использовать обратные вызовы с 'insert()' и асинхронным итератором. –