Mongoose потребляет много памяти, когда я использую find().cursor()

#mongodb #mongoose

#mongodb #mongoose

Вопрос:

Я использую Node.js и Mongoose для запроса данных из mongodb (версия 3.2):

 let cursor = cbo.find({ 
    InsertTime: { 
        $gte: data.ValidTimeStart, 
        $lte: data.ValidTimeEnd 
    }
}).lean().cursor({batchSize:1000});

cursor.on('data', (chunk) => console.log(chunk));
cursor.on('end', () => console.log("end"));
  

Результат правильный, но объем памяти продолжает увеличиваться, пока не будут возвращены все результаты, и через некоторое время освобождается много памяти. Обычно у меня около 1 миллиона элементов, это занимает почти 500 МБ памяти.

Можно ли было бы использовать курсор, который возвращает поток, чтобы освободить часть памяти после каждого выпуска данных.

Как эффективно использовать память?

Комментарии:

1. Итак, у вас есть полные данные по chunk ? это может привести к утечке памяти. использовать cursor.next() вручную?

2. не полные данные в одном фрагменте, каждая строка вводит фрагмент один раз. но весь результат поиска останется в памяти, не освобожденной до конца. Я думал, что память освободится при включении chunk

3. как вы это решили? @ttulka