Search code examples
node.jsmongodbnode-mongodb-native

Changing mongo database


I want to query a collection in my replica set using the native 2.0 mongodb driver for node. I can connect and authenticated against the admin database but how do I switch databases to query the collection I'm interested in?

var mongodb  = require('mongodb');
var MongoClient = mongodb.MongoClient;

var url = "mongodb://user:pass@db1,db2,db3/admin";

MongoClient.connect(url, function(err, db) {

    console.log("Connected correctly to server");
    console.log("Current database", db.databaseName);

    // switch context to database foo
    // foo.bar.findOne();

    db.close();

});

Solution

  • From MongoDB 2.0.0 Driver docs

    Indirectly Against Another Database

    In some cases you might have to authenticate against another database than the one you intend to connect to. This is referred to as delegated authentication. Say you wish to connect to the foo database but the user is defined in the admin database. Let’s look at how we would accomplish this.

    var mongodb  = require('mongodb');
    var MongoClient = mongodb.MongoClient;
    
    var url = "mongodb://user:pass@db1,db2,db3/foo?authSource=admin";
    
    MongoClient.connect(url, function(err, db) {
    
        console.log("Connected correctly to server");
        console.log("Current database", db.databaseName);
    
        //db==foo
    
        db.close();
    
    });