5

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

在 Mongoid < 3.0 中,您可以使用:

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

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

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

有没有更好的方法来访问master?还是一种确保命令由主节点评估的方法?

4

1 回答 1

6

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。

于 2012-08-02T14:47:31.403 回答