За да намерите документи, които не имате определен ключ, искате да използвате $exists
:
Така че проверката за съществуване ще изглежда така:
Model.where(:field.exists => false)
Model.where(:field => { :$exists => false })
Обърнете внимание, че първият :field.exists
формулярът става вторият формуляр, преди да бъде изпратен до MongoDB; Споменавам това, защото няма да можете да използвате :field
другаде в заявката, без да използвате $and
или $or
за комбиниране на клаузите::field.exists
разширяването може да доведе до презаписване на ключовете в хеша на заявката. Тук няма да имате този проблем, но едно напомняне не може да навреди.
Търси се true
е лесно:
Model.where(:field => true)
Искате едно от двете, така че ги комбинирайте с $or
:
Model.where(:$or => [
{ :field.exists => false },
{ :field => true }
])
Ако :field
може да е там, но да има null
стойност, тогава можете да използвате { :field => nil }
за съпоставяне на документи, където :field
е null
или изобщо не е там:
Model.where(:$or => [
{ :field => null },
{ :field => true }
])
# or
Model.where(:field.in => [ null, true ]) # This is probably the one you want
Има и { :field => { :$type => 10 } }
ако търсите неща, които има тами изрично null
. Сега може да е добър момент за бърз преглед на често задаваните въпроси за MongoDB: