sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoid fråga efter värde eller standardvärde

För att hitta dokument som inte gör det har en speciell nyckel, vill du använda $exists :

Så existenskontrollen skulle se ut så här:

Model.where(:field.exists => false)
Model.where(:field => { :$exists => false })

Observera att den första :field.exists form blir det andra formuläret innan det skickas till MongoDB; Jag nämner detta eftersom du inte kommer att kunna använda :field någon annanstans i frågan utan att använda $and eller $or för att kombinera satserna::field.exists expansion kan leda till att nycklar i frågan Hash skriver över varandra. Du kommer inte att ha det här problemet här men en påminnelse kan inte skada.

Letar efter true är lätt:

Model.where(:field => true)

Du vill ha båda så kombinera dem med $or :

Model.where(:$or => [
  { :field.exists => false },
  { :field        => true  }
])

Om :field kan finnas där men har en null värde då kan du använda { :field => nil } för att matcha dokument där :field är null eller inte alls där:

Model.where(:$or => [
  { :field => null  },
  { :field => true  }
])
# or
Model.where(:field.in => [ null, true ]) # This is probably the one you want

Det finns också { :field => { :$type => 10 } } om du letar efter saker som finns där och uttryckligen null . Nu kan det vara ett bra tillfälle för en snabb genomgång av MongoDB FAQ:




  1. Introduktion till Apache HBase Snapshots

  2. Hur man kopplar Laravel-webbplatsen med mongoDB-atlas

  3. Hur returnerar man endast den första förekomsten av ett ID med Mongoose?

  4. Varför går inte Redis-nycklarna ut?