2012-07-23 8 views
5

Mongoid> 3.0でどのようにマスターノードにアクセスできますか? Mongoid <でMongoid 3マスターノードへのアクセス

あなたが使用することができ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のような他の可能なソリューションceはevalよりも推奨されます。

+0

ありがとうございます。私は修理をすることが必死に必要でしたが、 "Mongoid.master.command({'repairDatabase' => 1})"ではなく、もうmongoid 3では使用できませんでした。代わりに、 "SomeModel.collection.database.command { 'repairDatabase' => 1}) " –

+0

' SomeModel.mongo_session'はどうしますか? – Dean

+1

ブロック 'User.collection.database.session.cluster.with_primary do'は不要です – akostadinov

関連する問題