Chcete-li najít dokumenty, které není mít konkrétní klíč, chcete použít $exists
:
Kontrola existence by tedy vypadala takto:
Model.where(:field.exists => false)
Model.where(:field => { :$exists => false })
Všimněte si, že první :field.exists formulář se stane druhým formulářem před odesláním do MongoDB; Zmiňuji to, protože nebudete moci použít :field jinde v dotazu bez použití $and nebo $or pro kombinaci klauzulí::field.exists rozšíření může vést k tomu, že se klíče v dotazu Hash navzájem přepíší. Tady tento problém mít nebudete, ale připomenutí neuškodí.
Hledá se true je snadné:
Model.where(:field => true)
Chcete-li jeden, zkombinujte je s $or
:
Model.where(:$or => [
{ :field.exists => false },
{ :field => true }
])
Pokud :field může tam být, ale má null hodnotu pak můžete použít { :field => nil } pro shodu dokumentů s :field je null nebo tam vůbec ne:
Model.where(:$or => [
{ :field => null },
{ :field => true }
])
# or
Model.where(:field.in => [ null, true ]) # This is probably the one you want
Je zde také { :field => { :$type => 10 } } pokud hledáte věci, které tam jsou a explicitně null . Nyní může být vhodný čas na rychlou recenzi MongoDB FAQ: