2010-11-22 11 views
24

モンゴイドクラスのハッシュフィールドで照会します。私はどのように私が条件でこれを行うことができるか分からないのですか?ここでMongoidハッシュフィールドの照会

は一例です:だから

class Person 
    include Mongoid::Document 

    field :things, :type => Hash 
end 

、のは、私はこれを持っているとしましょう:

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

私はサムスンでテレビとの最初の人のために照会したいです...

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

ありがとうございます。

答えて

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

これは、MongoidとMongoDBが本当に輝く場所です。 Mongoidの基準法(Person.wherePerson.any_ofPerson.excludesなど)

Mongoidのサイトがどのようにいくつかの素晴らしいドキュメントを持っているあなたのActiveRecordスタイルのファインダーよりもはるかに柔軟性(など、Person.firstPerson.find:conditionsハッシュを渡す)を与えます私は次のエラーを取得することをしようとすると

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

+0

Criteriaを使用するには、 "BSON :: InvalidKeyName: '' キーを含めることはできませんが、" –

+0

ネヴァーマインドを。そのエラーは私の ".create"メソッドでその構文を使用しようとしたときでした。ありがとう、それは素晴らしい仕事。 –

+0

さて、問題は、Peopleが「保存」を使用して永続化され、後で「どこ」メソッドを使用して取得されたときに、p.things [:tv]にアクセスできなくなることです。p.things [テレビ']。モンゴイドはそれを文字列に変換します。それがどうしてあろうと思っていますか? –