'如何高效地通过node.js mongodb驱动程序stream大型json文档?

我正在写一个node.js应用程序,通过mongo node.js驱动程序查询到mongodb数据库。 我想要路由到一个大json文档呈现的链接,但是,我想为了性能方面的考虑而stream式传输文档。

代码如下:

var express = require("express"), app = express(), MongoClient = require("mongodb").MongoClient; MongoClient.connect("mongodb://localhost:27017/database", function(err,db) { var query = db.collection("manzanas").find({ "_id": "query" }) .project({ "_id":0 }); app.get("/link", function(req,res) { query.stream().on("data", function(d) { res.json(d); }); query.stream().on("end", function() { console.log("done"); res.end(); }); }); }); app.listen(8080, function() { console.log("server is on!"); }); 

问题是,我第一次尝试访问链接一切都按预期工作,但是当我尝试刷新页面或从另一个选项卡或浏览器访问路由的JSON文档不呈现,而页面试图刷新时虽然互联网连接非常慢, 并最终没有显示。

我不知道如何解决这个问题,如果我不stream式处理文档,只是显示它,但是我没有遇到任何问题,但是我想知道如何使它与stream一起工作。 为了使其再次运行,我必须完全退出node.js进程,但这不是生产模式场景的选项。

我怎样才能做到这一点,什么是最好的方法? 有没有更好的方式做到这一点,而不使用express.js? 任何意见都非常感谢。

谢谢您的帮助。

       

网上收集的解决方案 "'如何高效地通过node.js mongodb驱动程序stream大型json文档?"

做这个,而不是

  app.get("/link", function(req,res) { var query = db.collection("manzanas").find({ "_id": "query" }) .project({ "_id":0 }); query.stream().on("data", function(d) { res.json(d); }); query.stream().on("end", function() { console.log("done"); res.end(); }); }); 

也就是说,每次请求并在其上进行stream式处理时都会生成查询。