2010-11-22 4 views
24

Quiero consultar en un campo Hash para una clase Mongoid. No estoy seguro de cómo puedo hacer esto con las condiciones?Consulta en Mongoid Hash Field

Aquí se muestra un ejemplo:

class Person 
    include Mongoid::Document 

    field :things, :type => Hash 
end 

tanto, vamos a decir que tengo esto:

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

quiero preguntar para la primera persona con un televisor que es un Samsung ...

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

Gracias de antemano.

Respuesta

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

Aquí es donde realmente brillan Mongoid y MongoDB. métodos de MongoId criterios (Person.where, Person.any_of, Person.excludes, etc.) le dará mucha más flexibilidad que los buscadores de estilo ActiveRecord (pasando un hash :conditions-Person.find, Person.first, etc.)

sitio de Mongoid tiene un gran documentación sobre cómo utilizar Criteria:

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

+0

Cuando trato de que me sale el siguiente error: "BSON :: InvalidKeyName: clave debe contener no ''." no importa –

+0

. Ese error fue cuando estaba tratando de usar esa sintaxis en mi método ".create". Gracias, funcionó muy bien. –

+0

Bueno, ahora el problema es que cuando People persiste usando "guardar" y luego lo recupera usando el método "donde", ya no puede acceder a p.things [: tv] .. tiene que ser p.things [' televisión']. Mongoid lo convierte en cuerda. ¿Alguna idea de por qué sería eso? –