我需要做类似的事情:
Lineup.stream({foo:"bar"}).exec(function(err,lineup){
// Do something with each record
});
阵容是一个拥有超过18000条记录的集合,因此我认为使用find
不是一个好选择。这样做的正确方法是什么?从文档我无法弄清楚如何。
答案 0 :(得分:5)
.stream()
方法返回node stream interface(读取流),在读取数据时发出事件。您在此处的选项要么是.pipe()
要么可以采用“流”输入的其他内容,例如服务器的响应对象,要么将event listener附加到从流发出的事件中。即:
管道响应
Lineup.stream({foo:"bar"}).pipe(res);
设置事件监听器
var stream = Lineup.stream({foo:"bar"});
stream.on("data",function(data) {
stream.pause(); // stop emitting events for a moment
/*
* Do things
*/
stream.resume(); // resume events
});
stream.on("err",function(err) {
// handle any errors that will throw in reading here
});
.pause()
和.resume()
非常重要,因为处理过程中的内容只是在代码完成之前对发出的事件做出响应。虽然对于小型情况很好,但对于接口用于的较大“流”来说这是不可取的。
此外,如果您在这样的事件处理程序中调用任何“异步”操作,那么您需要在回调或承诺解析中注意.resume()
,从而等待“异步”操作完成本身。
但请查看前面链接的“节点文档”,以获取有关“流”的更深入信息。
P.S我相信如果它更适合你的敏感度,也应该支持以下语法:
var stream = Lineup.find({foo:"bar"}).stream();