sql >> Base de Datos >  >> NoSQL >> MongoDB

Consulta mongoide por valor o valor predeterminado

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: