Quiero consultar sobre un campo Hash para un Mongoid Clase. No estoy seguro de cómo me puedes hacer esto con las condiciones?

Aquí está un ejemplo:

class Person
  include Mongoid::Document

  field :things, :type => Hash
end

Así que, digamos que tengo este:

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

Quiero de consulta para la primera persona con una tv que es un Samsung…

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

Gracias de antemano.

1 Comentario

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

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

    Mongoid del sitio tiene gran documentación sobre cómo usar Criteria:

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

    • Cuando intento que me sale el siguiente error: «HIJO::InvalidKeyName: clave no debe contener ‘.'»
    • Nevermind. Que error fue cuando yo estaba tratando de utilizar la sintaxis en mi «.crear el método». Gracias, funcionó muy bien.
    • Bien, ahora el problema es que cuando la Gente se conserva el uso de «guardar» y luego se recupera mediante el «donde» el método, no puede acceder a la p.las cosas [de televisión].. tiene que ser p.las cosas[‘tv’]. Mongoid convierte a string. Alguna idea de por qué sería?
    • Las claves del hash tiene que ser cadenas según el HIJO de especificaciones. Técnicamente no válido para el uso p.las cosas[:tv] para establecer el valor, pero Mongoid es el de convertir a string para usted. Este es un problema con MongoDB sí mismo: mongodb.org/display/DOCS/… Usted puede almacenar símbolos, valores, sin embargo. Para las llaves, usted sólo tiene que utilizar p.las cosas[‘tv’] .
    • No, en realidad @bowsersenior , que hacen de este punto mucho más clara que el MongoID docs página. Lo he leído varias veces y no captaba este.
    • Parece que usted está consultando un valor de hash – es posible la consulta de una clave de hash en su lugar? También, si usted índice hash campo, va a ser utilizado en un valor de búsqueda? Clave de búsqueda? Gracias esto es de gran ayuda!
    • Hola Brian, no estoy seguro de si Mongoid cuenta con un ayudante a la consulta para una clave. Puede que tenga que pasar una prima de MongoDB consulta mediante $exists . Ver la MongoDB docs para más info: mongodb.org/display/DOCS/… creo que la última MongoDB versiones (2.x) debe utilizar índices para la búsqueda, pero se debe confirmar por sí mismo para buscar en el documento oficial (try mongodb.org/display/DOCS/Indexes).

Dejar respuesta

Please enter your comment!
Please enter your name here