die*_*lar 2 mongodb node.js sails.js waterline
我需要做类似的事情:
Lineup.stream({foo:"bar"}).exec(function(err,lineup){
// Do something with each record
});
Run Code Online (Sandbox Code Playgroud)
阵容是一个拥有超过18000条记录的集合,因此我认为使用find不是一个好选择.这样做的正确方法是什么?从文档我无法弄清楚如何.
该.stream()方法返回一个节点流接口(读取流),该接口在读取数据时发出事件.您可以选择.pipe()其他可以进行"流"输入的内容,例如服务器的响应对象,或者将事件侦听器附加到流中发出的事件.即:
用管道传递回应
Lineup.stream({foo:"bar"}).pipe(res);
Run Code Online (Sandbox Code Playgroud)
设置事件监听器
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
});
Run Code Online (Sandbox Code Playgroud)
在.pause()和.resume()相当inportant的处理过程中,否则事情就保持响应发出的事件之前的代码完成.虽然对于小的情况很好,但对于要用于接口的较大"流"来说这是不可取的.
另外,如果你在这样的事件处理程序中调用任何"异步"动作,那么你需要.resume()在回调或承诺解析中注意,从而等待"异步"动作完成它自己.
但请查看前面链接的"节点文档",以获取有关"流"的更深入信息.
PS我相信如果它更适合你的敏感度,也应该支持以下语法:
var stream = Lineup.find({foo:"bar"}).stream();
Run Code Online (Sandbox Code Playgroud)