【问题标题】:Access to Mongoid 3 master node访问 Mongoid 3 主节点
【发布时间】:2012-07-23 23:38:53
【问题描述】:

如何在 Mongoid > 3.0 中访问主节点?

在 Mongoid

Mongoid::Config.master.eval('...')

我能在 3 中找到的最接近的似乎是:

klass.collection.database.command(eval: '...') #=> failed with error "not master"

有没有更好的方法来访问master?或者确保命令由主节点评估的方法?

【问题讨论】:

    标签: ruby-on-rails-3 mongoid


    【解决方案1】:

    Mongoid 3.0 使用 Moped 而不是 10gen 驱动程序,请参阅 Moped::Cluster#with_primary

    http://rubydoc.info/github/mongoid/moped/master/Moped/Cluster:with_primary

    例如:

    User.collection.database.session.cluster.with_primary do
      p User.collection.database.command(eval: 'function() { return 3+3; }')
      p User.collection.database.command(ping: 1)
    end
    

    输出:

    {"retval"=>6.0, "ok"=>1.0}
    {"ok"=>1.0}
    

    请注意,与 eval 相比,建议使用其他可能的解决方案,例如 group、aggregation 和 mapreduce。

    【讨论】:

    • 谢谢。我迫切需要进行修复,一个 lá "Mongoid.master.command({'repairDatabase' => 1})" 但在 mongoid 3 中不能再运行了。相反我做了类似 "SomeModel.collection.database.command({ 'repairDatabase' => 1})"
    • SomeModel.mongo_session怎么样?
    • 看来User.collection.database.session.cluster.with_primary do这个块是没有必要的
    猜你喜欢
    • 2019-01-21
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 2023-04-01
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多