2010-11-22 32 views
24

Je souhaite interroger un champ Hash pour une classe Mongoid. Je ne suis pas sûr de savoir comment je peux le faire avec des conditions?Requête sur un champ de hachage Mongoid

Voici un exemple:

class Person 
    include Mongoid::Document 

    field :things, :type => Hash 
end 

Alors, disons que j'ai ceci:

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

Je veux interroger pour la première personne avec une télévision qui est un Samsung ...

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

Merci d'avance.

Répondre

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

C'est là que Mongoid et MongoDB brillent vraiment. Les méthodes Critères de MongoId (Person.where, Person.any_of, Person.excludes, etc.) vous donnera beaucoup plus de flexibilité que les trouveurs de style ActiveRecord (passer un hachage :conditions-Person.find, Person.first, etc.)

site de MongoId a une grande documentation sur la façon utiliser Criteria:

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

+0

Lorsque je tente que je reçois l'erreur suivante: "BSON :: InvalidKeyName: clé ne doit pas contenir." –

+0

de Nevermind. Cette erreur était lorsque j'essayais d'utiliser cette syntaxe sur ma méthode ".create". Merci, ça a bien marché. –

+0

Eh bien, maintenant le problème est que lorsque People est persistant en utilisant "save", puis récupéré plus tard en utilisant la méthode "where", vous ne pouvez plus accéder à p.things [: tv] .. il doit être p.things [' la télé']. Mongoid le convertit en chaîne. Des pensées sur pourquoi ce serait? –