【问题标题】:How to programmatically get the current database Mongoid is writing to?如何以编程方式获取 Mongoid 正在写入的当前数据库?
【发布时间】:2012-10-13 21:53:05
【问题描述】:

我正在使用 Mongoid.override_database("database_name") 与多个数据库交谈,并使用 Mongoid 和 rails。如何以编程方式查找当前数据库?

会话上的 Mongoid 文档:http://mongoid.org/en/moped/docs/driver.html 定义了覆盖数据库的方法,但没有定义使当前数据库处于使用状态的方法。

【问题讨论】:

    标签: ruby-on-rails mongodb mongoid mongodb-ruby mongoid3


    【解决方案1】:

    Mongoid 版本 7.0.5

    Mongoid.client(:default).database
    

    【讨论】:

      【解决方案2】:

      运行 Mongoid.default_session.options[:database] 会出现 default_session 无效的错误。现在是 default_client。效果很好。

      在没有 [:database] 的情况下运行它以获取所有选项并查看数据库的完整配置。

      Mongoid::Config.clients["default"]["database"] 假设您使用 uri 版本的 mongoid.yml。在所有情况下,您都将得到 nil。使用 Mongoid::Config.clients["default"] 获取当前数据库的完整配置,或使用 Mongoid::Config.clients["default"]['uri'] 为您提供完整的 uri。

      从最后一个端口号/之后的 URI 中选择数据库名称。如果使用分片配置,可能会有多个

      【讨论】:

        【解决方案3】:

        获得这个的新方法是

        Mongoid::Config.clients["default"]["database"]
        

        你也可以看看

        Mongoid::Config.clients
        

        看看还有什么可用的。

        【讨论】:

        • 您也可以使用符号。 Mongoid::Config.clients[:default][:database]
        【解决方案4】:

        知道了!

        Mongoid.default_session.options[:database]
        

        【讨论】:

        • 现在是符号:Mongoid.default_session.options[:database]
        • 已更正。谢谢。
        • 警告,这不是线程安全的!! - 如果您在应用程序控制器的 before_filter 中切换数据库,这将返回应用程序中其他线程中使用的数据库名称。
        • 这似乎已被弃用。
        • 现在是Mongoid.default_client.options[:database]
        【解决方案5】:

        如果你想要你实际需要使用的覆盖数据库

        Mongoid::Threaded.database_override
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-16
          • 1970-01-01
          • 2011-04-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多