2015-07-03 3 views
0

Я работаю с функцией потоковой передачи курсора MongoDB. В моем коде несколько документов объединяются вместе, поэтому я хочу денормализовать документы, а затем передать их клиенту. Я смущен тем, где даже начать. Вот некоторые псевдо-код, что я пробовал:Слияние потоков в nodejs

var stream = new Readable({ objectMode: true }); 

var cursor = collection.find(); 
cursor.forEach(fetch); 

function fetch(document) { 
    stream.push(document); 
    // Get all joined documents and run fetch() on them 
} 

return stream; 

я получаю некоторые ошибки, потому что он не реализует _read. Этот метод также затрудняет поиск, когда нужно позвонить stream.push(null).

Какое решение этой проблемы?

ответ

0

Метод _read необходим для реализации читаемого потока. Если вы предпочитаете более простой интерфейс, вы, вероятно, предпочитаете использовать Проходной поток:

var stream = new PassThrough({ objectMode: true }); 

var cursor = collection.find(); 
cursor.forEach(fetch); 

function fetch(document) { 
    stream.write(document); 
    // Get all joined documents and run fetch() on them 
} 

return stream; 

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

Также ознакомьтесь с API-интерфейсом mongodb, чтобы узнать, как правильно проверить конец потока записей коллекции и соответствующим образом вызвать метод stream.end().

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