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: