2016-04-11 69 views
2

正如标题所示,我正在使用Express为我的web应用程序。猫鼬:流聚合的JSON数据

目前,我的代码看起来是这样的:

API控制器

var mongoose = require('mongoose'); 
var Doc = mongoose.model('Document'); 

var sendJSONresponse = function(res, status, content) { 
    res.status(status); 
    res.json(content); 
}; 

// "/api/documents" 
module.exports.listAllDocuments = function(req, res) { 

    var stream = Doc.find().stream(); 
    stream.on('data', function (chunk) { 
    res.write(JSON.stringify(chunk)); 
    }).on('error', function (err) { 
    console.log('Error: ' + err); 
    }).on('end', function() { 
    res.end(); 
    }); 

}; 

而不是使用var stream = Doc.find().stream();的,我想使用的aggregate()

find(),aggregate()应该是一个可读的流,对不对?

然而,当我简单地用aggregate()呼叫替换find()时,它似乎不起作用。

它说类型错误:Object #<Aggregate> has no method 'stream'。什么是替代流式汇总JSON数据

回答

4

如果你在执行前呼吁Aggregatecursor(),随后exec()返回本地光标然后您可以致电给stream()流的结果。

var stream = Doc.aggregate(pipeline).cursor().exec().stream(); 
stream.on('data', ... 

不完全直观,但它工作时,我试了一下。

+0

谢谢你的回答。我会尝试。 @JohnnyHK。另一个问题:如果我的'aggregate()'调用返回单个文档,那么使用'stream()'没有意义吗?从我使用'stream()'和'find()'的理解中,数据是以每个文档为基础返回的。有没有可能改变这种行为? – Tacocat

+0

对,它将作为每个数据块的结果文档流。没办法改变AFAIK。 – JohnnyHK

+0

感谢您的确认,@JohnnyHK,:)。无论如何,你知道有什么方法使视图渲染中的Express支持数据流式传输吗? > _ < – Tacocat