【问题标题】:MongoDB / Express - How to switch database after connecting via connect()MongoDB / Express - 如何在通过 connect() 连接后切换数据库
【发布时间】:2014-01-31 09:12:35
【问题描述】:

我正在使用 express 连接到我的 mongoDB:

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

      // How would one switch to another database here?

});

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

虽然我已经搜索了官方文档,但我找不到适合我需要的东西。

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

感谢任何帮助。

【问题讨论】:

    标签: javascript mongodb express


    【解决方案1】:

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

    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`
      ...
    });
    

    【讨论】:

    • 请注意,db method 将“创建一个共享当前套接字连接的新数据库实例”并且“新数据库实例在父级中相关-child 与原始实例的关系,以便在子数据库实例上正确发出事件”。此外,“子数据库实例被缓存,因此执行 db('db1') 两次将返回相同的实例”。因此,在生产中使用它之前请仔细阅读文档,因为关闭一个“child”数据库上的连接可能会一次“关闭”多个数据库。
    • 你可以在node-mongodb-native源代码中找到分层close方法的实现细节。
    【解决方案2】:

    您只需再次调用MongoClient.connect,因为每个数据库只有一个连接。这意味着,您不能更改现有连接的数据库。您必须再次连接:

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

    【讨论】:

    • 所以我在这里有2个意见,哪一个是要走的路?
    • 这取决于您是否要并行使用两个(或更多)数据库。如果您只切换一次,您可能会采用 robertklep 的解决方案。如果您一直在 siwtching,最好保持多个数据库连接处于打开状态(我的解决方案)。
    • 感谢您的澄清
    • @heinob 您可以使用我回答中的方法通过同一连接打开多个数据库。我已经编辑了我的答案以澄清这一点。
    • 我还想知道如何能够从不同的函数更改数据库和集合 - 你可以只创建一个全局实例并“更新它”,还是每次运行一个函数时都运行 mongodb.MongoClient.connect...被调用(这可能是点击事件以从数据库中获取文档等)?我拒绝做后者,因为这似乎有很多联系要做!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2021-05-13
    相关资源
    最近更新 更多