2016-04-11 95 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