Para encontrar documentos que no tiene una clave particular, quiere usar $exists
:
Entonces la verificación de existencia se vería así:
Model.where(:field.exists => false)
Model.where(:field => { :$exists => false })
Tenga en cuenta que el primer :field.exists
form se convierte en el segundo formulario antes de enviarse a MongoDB; Menciono esto porque no podrás usar :field
en otra parte de la consulta sin usar $and
o $or
para combinar las cláusulas:el :field.exists
La expansión puede llevar a que las claves en la consulta Hash se sobrescriban entre sí. No tendrás este problema aquí, pero un recordatorio no hace daño.
Buscando true
es fácil:
Model.where(:field => true)
Quiere cualquiera de los dos, así que combínelos con $or
:
Model.where(:$or => [
{ :field.exists => false },
{ :field => true }
])
Si :field
podría estar allí pero tener un null
valor entonces podría usar { :field => nil }
para hacer coincidir documentos donde :field
es null
o no hay nada:
Model.where(:$or => [
{ :field => null },
{ :field => true }
])
# or
Model.where(:field.in => [ null, true ]) # This is probably the one you want
También hay { :field => { :$type => 10 } }
si buscas cosas que están ahí y explícitamente null
. Ahora podría ser un buen momento para una revisión rápida de las preguntas frecuentes de MongoDB: