使用 mongoose 切换数据库

arp*_*pho 5 mongoose node.js

您好,有没有办法用 mongoose 切换数据库?我想我可以这样做:

mongoose.disconnect();
mongoose.connect('localhost',db);
Run Code Online (Sandbox Code Playgroud)

但它不起作用我收到此错误:

Error: Trying to open unclosed connection.
Run Code Online (Sandbox Code Playgroud)

不知道是不是因为是异步的

sri*_*asy 6

正如已经说过的,你可以使用useDb函数来做到这一点:

示例代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您想创建一个全新的连接,那么您必须尝试mongoose.createConnection()。仅供参考,如果mongoDB您使用驱动程序,则可以使用::

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`
  ...
});
Run Code Online (Sandbox Code Playgroud)

参考: mongoose 多个不同的连接mongoose useDb()mongoDB 驱动程序切换连接


Eva*_*cas 3

它是异步的。如果您传递一个回调函数来断开连接并尝试连接到该回调中的下一个数据库,它将起作用。

前任。

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()
  })
}
Run Code Online (Sandbox Code Playgroud)