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: