【问题标题】:Querying a MongoDB documents in real-time实时查询 MongoDB 文档
【发布时间】:2015-07-16 18:09:53
【问题描述】:

我正在构建一个可以使用大数据的 Web 应用程序。 我将使用 Apache Storm 挖掘 Twitter 数据,然后将它们保存在 MongoDB 数据库中。 同时,这些数据必须通过 Node.js 实时获取,并通过 socket.io 发送到我的前端。 是否存在通过 Node.js 实时查询 MongoDB 的方法? 谢谢。

【问题讨论】:

    标签: node.js mongodb real-time apache-storm bigdata


    【解决方案1】:

    我在做一个mongodb的项目,我用mongodbnpm module实时查询数据库。

    首先,我得到一个数据库中的集合列表:

      //My server controller page
        var MongoClient = require('mongodb').MongoClient
        , assert = require('assert');
    
        exports.getCollections = function(req,res){
            mongoose.connection.db.collectionNames(function(err, names) {
                if (err){ 
                   console.log(err)
                } else {
                    res.status(200).send({collections: names});
                }
            });
        };
    

    在前端,我执行 Angular ng-repeat 来列出我的收藏,然后当我点击收藏名称时,我运行以下代码:

          MongoClient.connect(url, function (err, db) {
                assert.equal(null, err);
                var collection = db.collection(req.body.collName);
                collection.find({}).limit(req.body.limit).toArray(function (err, docs) {
                    if (err) {
                       console.log(err)
                    } else {
                        res.status(200).send({r: docs, count: docs.length});
                        db.close();
                    }
                })
            });
    

    这是我的客户端角度代码:

     //get the collection list upon page load
      $http.get('collections')
        .success(function(c){
             $scope.collList = c.collections;
        })
        .error(function(err){
             $scope.error = err;
         });
    
    
      //function run when collection is selected
     $scope.doFind = function(coll){            
                $scope.collViewing = coll;
                $http.post('/basicfind',{collName: coll,limit:$scope.limiter})
                    .success(function(data){
                      $scope.results = data.r;
                      $scope.countOfResults = data.count;
                    })
                    .error(function(err){
                        $scope.error = err.message;
                    });
            };
    

    希望对您有所帮助,如果您需要我分享更多代码,请告诉我

    【讨论】:

    • 你好埃里克!感谢回答!我目前正在使用猫鼬和快递,我认为它可以在代码之间进行“合并”!这就是我需要的! Storm 插入的每条新记录,Node.js 都应该将其拾取并升级我的前端。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2021-02-25
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多