2012-07-23 86 views
5

如何訪問Mongoid> 3.0中的主節點?訪問Mongoid 3主節點

在Mongoid < 3.0,你可以使用:

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

最接近我可以在3找到似乎是:

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

有沒有更好的方式來獲得訪問掌握?還是一種確保命令由主節點評估的方法?

回答

6

Mongoid 3.0使用輕便摩托車,而不是10gen的驅動程序,所以看到助力車::集羣#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} 

請注意其他可能的解決方案,如組,聚合和mapredu推薦使用eval。

+0

謝謝。我迫切需要運行一個修復,一個lá「Mongoid.master.command({'repairDatabase'=> 1})」,但不能在mongoid 3中。相反,我做了一些像「SomeModel.collection.database.command({ 'repairDatabase'=> 1})「 – 2013-05-06 01:48:28

+0

如何使用'SomeModel.mongo_session'? – Dean 2014-09-17 02:02:43

+1

看起來'User.collection.database.session.cluster.with_primary do'塊沒有必要 – akostadinov 2014-10-22 20:41:38