For at finde dokumenter, der ikke har en bestemt nøgle, vil du bruge $exists
:
Så eksistenskontrollen ville se sådan ud:
Model.where(:field.exists => false)
Model.where(:field => { :$exists => false })
Bemærk, at den første :field.exists
formular bliver den anden formular, før den sendes til MongoDB; Jeg nævner dette, fordi du ikke vil være i stand til at bruge :field
andre steder i forespørgslen uden at bruge $and
eller $or
for at kombinere sætningerne::field.exists
udvidelse kan føre til, at nøgler i forespørgslen Hash overskriver hinanden. Du vil ikke have dette problem her, men en påmindelse kan ikke skade.
Leder efter true
er nemt:
Model.where(:field => true)
Du vil have begge, så kombiner dem med $or
:
Model.where(:$or => [
{ :field.exists => false },
{ :field => true }
])
Hvis :field
kan være der, men har en null
værdi, så kan du bruge { :field => nil }
for at matche dokumenter hvor :field
er null
eller slet ikke der:
Model.where(:$or => [
{ :field => null },
{ :field => true }
])
# or
Model.where(:field.in => [ null, true ]) # This is probably the one you want
Der er også { :field => { :$type => 10 } }
hvis du leder efter ting, der er der og eksplicit null
. Nu kan det være et godt tidspunkt for en hurtig gennemgang af MongoDB FAQ: