如何迭代Model.stream水线查询的每条记录?

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不是一个好选择.这样做的正确方法是什么?从文档我无法弄清楚如何.

Bla*_*ven 5

.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)