您如何访问 Mongoid > 3.0 中的主节点?
在 Mongoid < 3.0 中,您可以使用:
Mongoid::Config.master.eval('...')
我在 3 中能找到的最接近的似乎是:
klass.collection.database.command(eval: '...') #=> failed with error "not master"
有没有更好的方法来访问master?还是一种确保命令由主节点评估的方法?
您如何访问 Mongoid > 3.0 中的主节点?
在 Mongoid < 3.0 中,您可以使用:
Mongoid::Config.master.eval('...')
我在 3 中能找到的最接近的似乎是:
klass.collection.database.command(eval: '...') #=> failed with error "not master"
有没有更好的方法来访问master?还是一种确保命令由主节点评估的方法?
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。