猫鼬:流式聚合 JSON 数据

Mongoose: Streaming Aggregated JSON Data

如标​​题所示,我正在为我的网络应用程序使用 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() 调用时,它似乎不起作用。

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

如果您调用 cursor() on the Aggregate before executing it, the subsequent exec() returns a native cursor which you can then call stream() 来流式传输结果。

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

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