Node.js,Express,MongoDB和stream

我正在寻找通过Node.js服务器层将数据从MongoDBstream式传输到Web客户端的最佳方式。 我正在请求每个查询大约10MB的数据,并且查询已经在day_timestamp上编制索引。 请注意, 我已经阅读了这篇文章。

我正在使用的唯一的Mongo相关模块如下(我需要别人来实现我的目标?):

MongoClient = require('mongodb').MongoClient; 

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

 MongoClient.connect('mongodb://host:port/myDatabase', function(err, db) { if(err) throw err; console.log("Connected to Database"); // Server picks up URL requests made by browser app.get("/:type/:category/:resolution/:from/:to/", function (req, res){ var start = moment(); var type = String(req.params.type) ,category = String(req.params.category) ,resolution = String(req.params.resolution) ,from = moment.utc(req.params.from).toDate() ,to = moment.utc(req.params.to).toDate() ,options = { parse : true, accept : 'application/json' }; res.set('Content-Type', 'application/json'); // Required? res.writeHead(200, { 'Content-Type': 'application/json'}); // Required? var collection = db.collection(category); var stream = collection.find({'day_timestamp':{'$gte':from, '$lte':to}}) .sort({day_timestamp:1}) .stream() .pipe(JSONStream.stringify()) .pipe(res) }); }); 

这个工作,但似乎没有提供任何性能收益相比,“正常”collection.find()callback嵌套res.json(...);

我想了解一些事情。

首先,我想从MongoDB直接传输数据到我的Nods.js服务器…一旦它到达我的服务器,直接stream到客户端。 如果需要的话,这可以一路BSON,我可以在客户端反序列化它。 这可能吗?

其次,我将如何去添加一个例子来计时这个stream的性能比正常的collection.find()callback? 后面的例子,我可以很容易地实现这一点,但我不清楚我将如何做这样的stream示例(nb stream.end似乎没有工作,因为我期望可能因为.pipe

第三,我试图尽可能快地从MongoDB获取数据到我的客户端,而且我的Node.js不需要做太多(如果有的话)数据处理,因为数据按照需要存储在数据库中。 我是否为了实现这个目标而努力写作呢?

每次有数据写入时,都会写入res

 var stream = collection.find({'day_timestamp':{'$gte':from, '$lte':to}}) .sort({day_timestamp:1}) .stream(); stream.on('data', function(data) { res.write(JSON.stringify(data)); }); stream.on('end', function() { res.end(); });