2014-01-31 54 views
2

我使用Express连接到我的MongoDB:的MongoDB /快车 - 如何通过连接后切换数据库连接()

mongodb.MongoClient.connect(mongourl, function(err, database) { 

     // How would one switch to another database here? 

}); 

我必须连接到管理数据库摆在首位。在conenction建立后,我想切换数据库。

虽然我通过官方文档搜索,但我无法找到符合我需要的东西。

我知道MongoClient::open()方法,但我想坚持connect()

任何帮助表示赞赏。

回答

1

您只需再次致电MongoClient.connect,因为每个数据库只有一个连接。这意味着,您不能更改现有连接的数据库。你要连接第二个时间:

mongodb.MongoClient.connect(mongourl, function(err, database) { 
    mongodb.MongoClient.connect(mongourl_to_other_database, function(err, database2) { 
     // use database or database2 
    }); 
}); 
+0

所以我在这里有两个意见,哪一个是要走的路? – user2422960

+0

这取决于是否要并行使用两个(或更多)数据库。如果你只切换一次,你可以采取robertklep的解决方案。如果您一直在讨论,保持多个数据库连接打开(我的解决方案)可能是一个更好的主意。 – heinob

+0

感谢您的澄清 – user2422960

10

您可以切换到另一个数据库,像这样:

mongodb.MongoClient.connect(mongourl, function(err, database) { 
    // switch to another database 
    database = database.db(DATABASE_NAME); 
    ... 
}); 

docs

编辑:澄清:这也可以让你在同一连接上打开多个数据库:

mongodb.MongoClient.connect(mongourl, function(err, database) { 
    // open another database over the same connection 
    var database2 = database.db(DATABASE_NAME); 

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

请注意,此['db'方法](http://mongodb.github.io/node-mongodb-native/2.2/api/Db.html#db)将会“_创建一个共享当前套接字connections_的新的Db实例_ “并且”新数据库实例与原始实例在父子关系中相关,以便事件在子数据库实例上正确发出“。而且“_child db实例被缓存,因此执行db('db1')两次将返回相同的instance_”。因此,在生产中使用此文档之前,请仔细阅读文档,因为在一个“_child_”db上关闭连接可能会一次性“关闭”许多db。 – lifeisfoo

+0

您可以在[node-mongodb-native](http://mongodb.github.io/node-mongodb-native/2.2/api/lib_db.js.html#line362)中找到有关层次结构'close'方法的实现细节。源代码。 – lifeisfoo