【问题标题】:Connecting to two databases Mongoid连接两个数据库 Mongoid
【发布时间】:2019-11-25 22:24:09
【问题描述】:

我有两个数据库必须在我的应用程序中使用。我的 mongoid.yml 中有以下内容:

development:
  # Configure available database sessions. (required)
  sessions:
    # Defines the default session. (required)
    default:
      # Defines the name of the default database that Mongoid can connect to.
      # (required).
      database: db_development
      username: myusername
      password: mypassword
      # Provides the hosts the default session can connect to. Must be an array
      # of host:port pairs. (required)
      hosts:
        - myserverip:27017
      databases:
        secondary:
          database: db2_development
          username: myusername
          password: mypassword
          # Provides the hosts the default session can connect to. Must be an array
          # of host:port pairs. (required)
          hosts:
           - myserverip:27018          

在我的模型文件中:

class MyModel
   include Mongoid::Document
   store_in database: "secondary"
   field :name, type: String
   field :age, type: Integer
end

我在 MyModel 中有数据。当我尝试查询时,出现以下错误:

Moped::Errors::QueryFailure (The operation: #<Moped::Protocol::Query
  @length=96
  @request_id=5
  @response_to=0
  @op_code=2004
  @flags=[:slave_ok]
  @full_collection_name="secondary.mymodel"
  @skip=0
  @limit=0
  @selector={"name"=>"Tom"}
  @fields=nil>
  failed with error 10057: "unauthorized db:secondary ns:secondary.mymodel lock type:0 client:10.100.55.40"

我尝试在线搜索,但找不到任何解决方案。任何帮助,将不胜感激。提前致谢。

【问题讨论】:

    标签: ruby-on-rails-3 mongoid multiple-databases mongoid3 querying


    【解决方案1】:

    嗯,你能不能这样做,好像你弄乱了你的 yaml 文件

    development:
      sessions:
        default:
          database: db_development
          username: my_username
          password: my_password
          hosts:
            - myserverip:27017
          options:
            consistency: :eventual
        writeable:
          database: db2_development
          username: myusername2
          password  mypassword2
          hosts:
            -  myserverip2:27018
          options:
            consistency: strong
    

    在你的模型中写这个

    store_in session: "writeable"

    class MyModel
       include Mongoid::Document
       store_in session: "writeable"
       field :name, type: String
       field :age, type: Integer
    end
    

    仅供参考,从未使用password 选项进行测试,但我想它会起作用

    希望有帮助

    【讨论】:

    • 感谢您的回答我添加了 'localhost: 27017' 而不是 'myserverip: 27017' 和 "store_in database: 'db2_name'" 而不是 "store in session: 'writeable'" 并且它适用于我
    【解决方案2】:

    为了临时访问数据库(例如在脚本中),您可以使用 MongoDB Ruby 驱动程序:Tutorials - Documentation - Low Level Documentation

    快速概览:

    连接数据库:

    client = Mongo::Client.new([ '127.0.0.1:27017' ], :database =&gt; 'my_db')

    db = client.database

    通过 mongoDB 查询语法查询条目:

    db['collection_name'].find('field_name' =&gt; 'field_value')

    【讨论】:

      猜你喜欢
      • 2013-10-04
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-11
      • 2015-11-26
      相关资源
      最近更新 更多