Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if mongoDB is connected

I have mongoDB in my app.

I want to check if mongoDB is connected, before I listen to the app.

Is it the best way for doing it?

This is my server.js file:

var express = require('express');
var mongoDb = require('./mongoDb');
var app = express();

init();

function init() {
    if (mongoDb.isConnected()) {
      app.listen(8080, '127.0.0.1');
    }
    else {
      console.log('error');
    }
}

isConnected runs getDbObject. getDbObject connects to mongoDB and returns an object: connected (true/false), db (dbObject or error).

Then, isConnected resolve/reject by connected property.

This is mongoDb.js file:

//lets require/import the mongodb native drivers.
var mongodb = require('mongodb');
// Connection URL. This is where your mongodb server is running.
var url = 'mongodb://localhost:27017/myDb';

var connectingDb; // promise

//We need to work with "MongoClient" interface in order to connect to a mongodb server.
var MongoClient = mongodb.MongoClient;

init();

module.exports = {
    isConnected: isConnected
}

// Use connect method to connect to the Server
function init() {
  connectingDb = new Promise(
    function (resolve, reject) {
      MongoClient.connect(url, function (err, db) {
        if (err) {
          console.log('Unable to connect to the mongoDB server. Error:', err);
          reject(err);
        }
        else {
          console.log('Connection established to', url);

          //Close connection
          //db.close();
          resolve(db);
        }
      });

    }
  );
}

function getDbObject() {
  return connectingDb().then(myDb => {
                                       return {
                                          connected: true,
                                          db: myDb
                                        }
                                      }
                              )
                       .catch(err =>  {
                                        return {
                                          connected: false,
                                          db: err
                                        }
                                      }
                             )
}

function isConnected() {
    return new Promise(
        function(resolve, reject) {
          var obj = getDbObject();
          if (obj.connected == true) {
            console.log('success');
            resolve(true);
          }
          else {
            console.log('error');
            reject(false);
          }
        }
    )

}

Any help appreciated!

like image 648
Maria Maldini Avatar asked Sep 20 '16 16:09

Maria Maldini


People also ask

How do I monitor my MongoDB connections?

You can leverage tools like mongostat and mongotop. Use MongoDB's built-in free monitoring feature to get information on Operation Execution Times and Operation Counts. Once you connect via compass to your instance, you can use the MongoDB Compass Performance Tab, which is similar to Atlas RealTime Performance panel.

How do you check MongoDB is connected or not in Python?

Call the method server_info() of the client instance to check MongoDB server running Pymongo Python with the exception called ServerSelectionTimeoutError .


2 Answers

there are multiple ways depends on how your DB is configured. for a standalone (single) instance. You can use something like this

Db.connect(configuration.url(), function(err, db) {
  assert.equal(null, err);

if you have a shared environment with config servers and multiple shards you can use

db.serverConfig.isConnected()
like image 131
satish chennupati Avatar answered Oct 08 '22 10:10

satish chennupati


Let client be the object returned from MongoClient.connect:

let MongoClient = require('mongodb').MongoClient
let client = await MongoClient.connect(url ...
...

This is how i check my connection status:

function isConnected() {
  return !!client && !!client.topology && client.topology.isConnected()
}

This works for version 3.1.1 of the driver. Found it here.

like image 11
Tiago Bértolo Avatar answered Oct 08 '22 12:10

Tiago Bértolo