Mongoose:流式聚合JSON数据

时间:2016-04-11 01:26:39

标签: mongoose streaming aggregate

正如标题所示,我正在使用Express作为我的网络应用程序。

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

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()应该是可读的流,对吗?

然而,当我只是用find()电话取代aggregate()时,它似乎无效。

它说TypeError:Object #<Aggregate> has no method 'stream'。什么是流式聚合JSON数据的替代方案

1 个答案:

答案 0 :(得分:5)

如果在执行var stream = Doc.aggregate(pipeline).cursor().exec().stream(); stream.on('data', ... 之前调用cursor(),则后续的timer.invalidate()会返回一个本机光标,然后您可以调用stream()来传输结果。< / p>

button.setBackgroundImage(backgroundImage1, forState: .Normal)
button.setBackgroundImage(backgroundImage2, forState: .Highlighted)
button.setBackgroundImage(backgroundImage2, forState: .Disabled)

不完全直观,但是当我尝试它时它起作用了。