sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongoid-forespørgsel efter værdi eller standardværdi

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:




  1. Sådan får du størrelse i bytes af bson-dokumenter

  2. i React kalder jeg to lister til side fra mongo, og jeg vil klikke på en for at filtrere, hvad der vises i en anden

  3. Flere Redis-forekomster

  4. find efter $typenummer i mongodb