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: