Слияние потоков в nodejs
Я работаю с функцией потоковой передачи курсора MongoDB. В моем коде несколько документов объединены, поэтому я хочу денормализовать документы и затем передать их клиенту. Я не понимаю, с чего начать. Вот некоторый псевдокод того, что я пробовал:
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)
,
Каково решение этой проблемы?
1 ответ
Метод _read необходим для реализации читаемого потока. Если вы предпочитаете более простой интерфейс, вы, вероятно, предпочтете использовать поток PassThrough:
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().