switching database with mongoose

2020-07-31 07:22发布

问题:

Hi is there a way to switch database with mongoose? I thought I could do it like that:

mongoose.disconnect();
mongoose.connect('localhost',db);

but it does not work I receive this error:

Error: Trying to open unclosed connection.

I do not know if it is because is asynchronous

回答1:

It is asynchronous. If you pass a callback function to disconnect and try to connect to the next database in that callback, it will work.

Ex.

var mongoose = require('mongoose')

mongoose.connect('mongodb://localhost/test1', function() {
  console.log('Connected to test 1')
  mongoose.disconnect(connectToTest2)
})

function connectToTest2() {
  mongoose.connect('mongodb://localhost/test2', function() {
    console.log('Connected to test 2')
    process.exit()
  })
}


回答2:

You should use useDb function.



回答3:

As already stated you could do it using useDb function :

Example code :

async function myDbConnection() {

    const url = 'mongodb+srv://username:password@cluster0-pauvx.mongodb.net/test?retryWrites=true&w=majority';

    try {
        await mongoose.connect(url, { useNewUrlParser: true });
        console.log('Connected Successfully')
        // Here from above url you've already got connected to test DB,
           So let's make a switch as needed.
        mongoose.connection.useDb('myDB'); // Switching happens here..
        /**
         * Do some DB transaction with mongoose models as by now models has already been registered to created DB connection
         */
    } catch (error) {
        console.log('Error connecting to DB ::', error);
    }
}

Or if you wanted to create a complete new connection then you've to try mongoose.createConnection(). Just for reference in case of mongoDB driver you would use ::

mongodb.MongoClient.connect(mongourl, function(err, primaryDB) {
  // open another database over the same connection
  const secondaryDB = primaryDB.db(SECONDARY_DATABASE_NAME);

  // now you can use both `database` and `database2`
  ...
});

Ref : mongoose multiple different connections, mongoose useDb(), mongoDB driver switch connections