2011-04-26 9 views
12

Co ja tu robię źle? Wiem, że _id jest w bazie danych, ale otrzymuję pusty wynik.Sterownik Ruby Mongo - Find_by_Id

@b = coll.find("_id" => "4db2ebee90036f010b000001") 

Dzięki

+0

to jeśli nic powrotu możesz wykonać to samo ręcznie w db? –

+0

@ Vlad, Używam MongoHQ iw rzeczywistości kiedy szukam {_id: "4db2ebee90036f010b000001"} Nie otrzymuję wyników. Jednak nie rozumiem dlaczego. Tam jest rząd. – donald

Odpowiedz

16

Użyj tego:

coll.find(:_id => BSON::ObjectId('4db2ebee90036f010b000001')).each do |data| 
    puts data.inspect 
end 
9

@b będzie zawierać kursor, a nie wynik. Musisz również użyć identyfikatora obiektu właściwego.

Prawdopodobnie chcesz to:

@b = coll.find_one(:_id => BSON::ObjectId('4db2ebee90036f010b000001')) 
2

z Ruby 1.9.3 i mongoid 3.0.19

@coll = Coll.find(hash["_id"]) 

lub

@coll = Coll.find("511296d2dfa18f07fa000009") 

znalezienia rekordu. Będzie zawsze tylko jeden, aid jest kluczem podstawowym, nigdy nie może być podwójne.

1

Chciałbym użyć czegoś w rodzaju first, która zwraca obiekt, ponieważ masz większe problemy, jeśli podstawowy identyfikator jest duplikowany w bazie danych. Składnia zależy od twojej wersji gem mongo, która jest przeznaczona dla wersji 2.1.0.

your_id = '4db2ebee90036f010b000001' 
db = Client.new([ "localhost:27017" ], :database => "db") 
coll = db[:testCollection] 
res = coll.find(:_id => BSON::ObjectId(your_id)).first 
0

Korzystanie Ruby wersja 2.3.1p112, Mongo (gem) 2.4.2 i BSON (gem) 4.2.2

Następujące pracował dla mnie

client = Mongo::Client.new(['127.0.0.1:3001'], :database=>'dbname') 
collection = client[:users] 
user = collection.find({_id:'XY3h5R7aJkh5FxFhJ'}).first