Search code examples
node.jsmongodbreal-timeapache-stormbigdata

Querying a MongoDB documents in real-time


I'm building a web application that will work with Big Data. I will mine Twitter data using the Apache Storm, subsequently saving them in a MongoDB database. At same time, this data has to be fetched via Node.js in real time and be sent via socket.io to my front-end. Exist a way to querying MongoDB via Node.js in real time? Thanks.


Solution

  • I am working on a project with mongoDB, I used the mongodb npm module to query the database in real time.

    First I get a list of collections which are in my database:

      //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});
                }
            });
        };
    

    On the front end, I do an Angular ng-repeat to list my collections, then when I click on the collection name, I run the following code:

          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();
                    }
                })
            });
    

    Here is my client side angular code:

     //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;
                    });
            };
    

    Hope that helps, let me know if you need me to share any more code