2013-07-26 1 views
0

Когда я stream() документов в NodeJS MongoDB native driver, как определить общее количество документов, которые будут возвращены? Например, полезно для отчета о прогрессе.Как подсчитать документы, возвращенные Node-MongoDB-native stream()?

var stream = collection.find(query, fields, options).stream() 
    .on("data", onData) 
    .on("end", onEnd) 
    .on("error", onError); 

ответ

1

Вы можете попробовать сначала вызвать collection.count.

collection.count(function(err, total) { 
    var count = 0; 
    var progress = 0; 
    function onData() { 
    progress = (++count/total) * 100; 
    } 

    var stream = collection.find(query, fields, options).stream() 
    .on("data", onData) 
    .on("end", onEnd) 
    .on("error", onError); 
}); 
+0

hm. учитывая, что коллекция хорошо проиндексирована для запроса, count() не должен нести накладные расходы (даже для запросов с большим количеством документов). верный? – ericsoco

+0

На самом деле нельзя говорить о производительности Монго, но есть улучшения производительности, которые, безусловно, могут быть включены. Например, вы можете отслеживать счетчик между запросами и только вызывать collection.count, если вы вставили новый документ со времени последнего запроса. Кроме этого, просто немного экспериментируйте, чтобы увидеть, какой удар вы делаете, подсчитывая каждый раз. –

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