Pour trouver des documents qui ne sont pas avez une clé particulière, vous souhaitez utiliser $exists
:
Ainsi, la vérification d'existence ressemblerait à :
Model.where(:field.exists => false)
Model.where(:field => { :$exists => false })
Notez que le premier :field.exists
form devient le deuxième formulaire avant d'être envoyé à MongoDB ; Je le mentionne car vous ne pourrez pas utiliser :field
ailleurs dans la requête sans utiliser $and
ou $or
pour combiner les clauses :le :field.exists
l'expansion peut conduire à ce que les clés de la requête Hash s'écrasent les unes les autres. Vous n'aurez pas ce problème ici mais un rappel ne peut pas faire de mal.
Recherche true
est facile :
Model.where(:field => true)
Vous voulez l'un ou l'autre, alors combinez-les avec $or
:
Model.where(:$or => [
{ :field.exists => false },
{ :field => true }
])
Si :field
peut être là mais avoir un null
value alors vous pouvez utiliser { :field => nil }
pour faire correspondre les documents où :field
est null
ou pas là du tout :
Model.where(:$or => [
{ :field => null },
{ :field => true }
])
# or
Model.where(:field.in => [ null, true ]) # This is probably the one you want
Il y a aussi { :field => { :$type => 10 } }
si vous cherchez des choses qui sont là et explicitement null
. Le moment est peut-être venu de passer rapidement en revue la FAQ de MongoDB :