2011-04-26 35 views
12

Tôi đang làm gì sai ở đây? Tôi biết _id nằm trong cơ sở dữ liệu nhưng tôi nhận được kết quả trống.Trình điều khiển Ruby Mongo - Find_by_Id

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

Cảm ơn

+0

hiện nó trở lại bất cứ điều gì nếu bạn thực hiện cùng một bằng tay trong db? –

+0

@Vlad, tôi đang sử dụng MongoHQ và trên thực tế khi tôi tìm kiếm {_id: "4db2ebee90036f010b000001"} Tôi không nhận được kết quả nào. Tuy nhiên, tôi không hiểu tại sao. Hàng ở đó. – donald

Trả lời

16

Sử dụng này:

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

@b sẽ chứa một con trỏ, không kết quả. Bạn cũng cần phải sử dụng một id đối tượng thích hợp.

Bạn có thể muốn điều này:

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

Với Ruby 1.9.3 và mongoid 3.0.19

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

hoặc

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

tìm ra kỷ lục. Sẽ chỉ bao giờ là một, _id là khóa chính, nó không bao giờ có thể gấp đôi.

1

Tôi sẽ sử dụng một cái gì đó như first trả về một đối tượng vì bạn có vấn đề lớn hơn nếu id chính của bạn được sao chép trong cơ sở dữ liệu. Cú pháp này phụ thuộc vào phiên bản đá quý mongo của bạn, phiên bản này dành cho phiên bản 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

dùng, Ruby phiên bản 2.3.1p112, Mongo (đá quý) 2.4.2 và BSON (đá quý) 4.2.2

Sau đây làm việc cho tôi

client = Mongo::Client.new(['127.0.0.1:3001'], :database=>'dbname') 
collection = client[:users] 
user = collection.find({_id:'XY3h5R7aJkh5FxFhJ'}).first 
Các vấn đề liên quan