2012-07-23 11 views
5

Jak uzyskać dostęp do węzła głównego w Mongoid> 3.0?Dostęp do węzła głównego Mongoid 3

W Mongoid < 3.0 można użyć:

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

Najbliżej mogę znaleźć w 3 wydaje się być:

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

Czy istnieje lepszy sposób, aby uzyskać dostęp do opanowania? Lub sposób na zapewnienie, że polecenie jest oceniane przez główny węzeł?

Odpowiedz

6

Mongoid 3.0 używa Motorower a nie kierowca 10gen, więc zobaczyć motorowerem :: Cluster # with_primary

http://rubydoc.info/github/mongoid/moped/master/Moped/Cluster:with_primary

Na przykład:

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 

wyjściowa:

{"retval"=>6.0, "ok"=>1.0} 
{"ok"=>1.0} 

Zauważ, że inne możliwe rozwiązania, takie jak grupa, agregacja i mapredu ce są zalecane przez eval.

+0

Dziękuję. Rozpaczliwie potrzebowałem uruchomić naprawę, "Mongoid.master.command ({" repairDatabase "=> 1})", ale już nie mogłem w mongoid 3. Zamiast tego zrobiłem coś w stylu "SomeModel.collection.database.command ({ "repairDatabase" => 1}) " –

+0

Co z użyciem' SomeModel.mongo_session'? – Dean

+1

wydaje się, że blok 'User.collection.database.session.cluster.with_primary do' nie jest konieczny – akostadinov