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: