2012-07-23 89 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