合并nodejs中的流

时间:2015-07-03 01:28:11

标签: node.js mongodb stream denormalization

我正在使用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 个答案:

答案 0 :(得分:0)

_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是否提供此类机制。

另外,查看mongodb API以了解如何正确检查集合条目stream end并相应地调用stream.end()方法。