Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js、Express、MongoDB和streams_Javascript_Node.js_Mongodb_Express_Stream - Fatal编程技术网

Javascript Node.js、Express、MongoDB和streams

Javascript Node.js、Express、MongoDB和streams,javascript,node.js,mongodb,express,stream,Javascript,Node.js,Mongodb,Express,Stream,我正在寻找通过Node.js服务器层将数据从MongoDB传输到web客户端的最佳方式。我要求每个查询大约10MB的数据,并且查询已经在day_时间戳上索引。注意 我使用的唯一与Mongo相关的模块如下(我是否需要其他人来实现我的目标?) 目前,我的代码如下所示: MongoClient.connect('mongodb://host:port/myDatabase', function(err, db) { if(err) throw err; console.log("Con

我正在寻找通过Node.js服务器层将数据从MongoDB传输到web客户端的最佳方式。我要求每个查询大约10MB的数据,并且查询已经在day_时间戳上索引。注意

我使用的唯一与Mongo相关的模块如下(我是否需要其他人来实现我的目标?)

目前,我的代码如下所示:

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)
    });
});
这是可行的,但与“普通”集合相比,似乎没有提供任何性能提升。find()回调嵌套
res.json(…)

我想了解一些事情

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

其次,我将如何添加一个示例来对这个流性能与普通的collection.find()回调进行计时?对于后一个示例,我可以很容易地实现这一点,但我不清楚如何使用流示例来实现这一点(注意,
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();
});

21个视图?这是一个如此热门的话题,没有答案:(?为什么要使用JSONStream?直接使用管道:感谢30个月后的评论;)我不记得我现在是如何解决这个问题的。你真的应该调查一下,自己回答这个问题,将其标记为已回答……并回馈社区!我经常这样做,我只是忘记了这一点
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();
});