Documenten vinden die niet . zijn een bepaalde sleutel hebt, wilt u $exists
:
Dus de aanwezigheidscontrole zou er als volgt uitzien:
Model.where(:field.exists => false)
Model.where(:field => { :$exists => false })
Merk op dat de eerste :field.exists
formulier wordt het tweede formulier voordat het naar MongoDB wordt verzonden; Ik vermeld dit omdat je :field
niet kunt gebruiken elders in de zoekopdracht zonder $and
. te gebruiken of $or
om de clausules te combineren:de :field.exists
uitbreiding kan ertoe leiden dat sleutels in de query Hash elkaar overschrijven. Hier heb je dit probleem niet, maar een herinnering kan geen kwaad.
Op zoek naar true
is eenvoudig:
Model.where(:field => true)
Je wilt een van beide, dus combineer ze met $or
:
Model.where(:$or => [
{ :field.exists => false },
{ :field => true }
])
Als :field
is er misschien maar heeft een null
waarde dan zou je { :field => nil }
. kunnen gebruiken om documenten te matchen waar :field
is null
of helemaal niet aanwezig:
Model.where(:$or => [
{ :field => null },
{ :field => true }
])
# or
Model.where(:field.in => [ null, true ]) # This is probably the one you want
Er is ook { :field => { :$type => 10 } }
als je zoekt naar dingen die er zijn en expliciet null
. Dit is misschien een goed moment voor een snelle bespreking van de MongoDB FAQ: