Per trovare documenti che non hai una chiave particolare, vuoi usare $exists
:
Quindi il controllo di esistenza sarebbe simile a:
Model.where(:field.exists => false)
Model.where(:field => { :$exists => false })
Nota che il primo :field.exists
il modulo diventa il secondo modulo prima di essere inviato a MongoDB; Lo dico perché non sarai in grado di utilizzare :field
altrove nella query senza utilizzare $and
o $or
per combinare le clausole:il :field.exists
l'espansione può portare a chiavi nella query Hash che si sovrascrivono a vicenda. Non avrai questo problema qui, ma un promemoria non può far male.
Cerco true
è facile:
Model.where(:field => true)
Ne vuoi uno, quindi combinali con $or
:
Model.where(:$or => [
{ :field.exists => false },
{ :field => true }
])
Se :field
potrebbe essere presente ma avere un null
valore quindi potresti usare { :field => nil }
per abbinare i documenti in cui :field
è null
o non c'è affatto:
Model.where(:$or => [
{ :field => null },
{ :field => true }
])
# or
Model.where(:field.in => [ null, true ]) # This is probably the one you want
C'è anche { :field => { :$type => 10 } }
se stai cercando cose che ci sono e esplicitamente null
. Ora potrebbe essere un buon momento per una rapida revisione delle FAQ di MongoDB: