我正在使用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)
。
这个问题的解决方案是什么?
答案 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()方法。