sql >> Database >  >> NoSQL >> MongoDB

Mongoïde zoekopdracht op waarde of standaardwaarde

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:




  1. Gebruik van collatie in mongodb $regex

  2. Honderden tellers tegelijk verhogen, redis of mongodb?

  3. Mangoest bevolken subdoc

  4. MongoDB &Meteor - Query om in geneste array te pushen werkt niet, geen fout gegenereerd