2010-11-22 28 views
24

Tôi muốn truy vấn trên trường Hash cho Lớp Mongoid. Tôi không chắc làm thế nào tôi có thể làm điều này với điều kiện?Truy vấn trên trường Mongoid Hash

Dưới đây là một ví dụ:

class Person 
    include Mongoid::Document 

    field :things, :type => Hash 
end 

Vì vậy, chúng ta hãy nói rằng tôi có điều này:

p = Person.new 
p.things = {} 
p.things[:tv] = "Samsung" 

tôi muốn truy vấn cho người đầu tiên với một tv đó là Samsung ...

People.first(:conditions => ????? 

Xin cảm ơn trước.

Trả lời

40
Person.where('things.tv' => 'Samsung').first 

Đây là nơi Mongoid và MongoDB thực sự tỏa sáng. phương pháp Mongoid của Tiêu chuẩn (Person.where, Person.any_of, Person.excludes, vv) sẽ cung cấp cho bạn sự linh hoạt hơn nhiều so với các Finders ActiveRecord kiểu (đi qua một băm :conditions-Person.find, Person.first, vv)

trang web Mongoid của có một số tài liệu tuyệt vời về cách sử dụng Criteria:

http://mongoid.org/en/mongoid/docs/querying.html

+0

Khi tôi cố gắng mà tôi nhận được lỗi sau: "BSON :: InvalidKeyName: Phím phải không chứa ''" –

+0

Nevermind. Lỗi đó là khi tôi cố gắng sử dụng cú pháp đó trên phương thức ".create" của tôi. Cảm ơn, nó hoạt động rất tốt. –

+0

Vâng, bây giờ vấn đề là khi mọi người được tiếp tục sử dụng "lưu" và sau đó lấy ra bằng cách sử dụng phương pháp "ở đâu", bạn không còn có thể truy cập p.things [: tv] .. nó phải là p.things [' TV']. Mongoid chuyển đổi nó thành chuỗi. Bất kỳ suy nghĩ về lý do tại sao đó sẽ là? –

Các vấn đề liên quan