Aby znaleźć dokumenty, których nie masz określony klucz, którego chcesz użyć $exists
:
Sprawdzenie istnienia wyglądałoby więc tak:
Model.where(:field.exists => false)
Model.where(:field => { :$exists => false })
Zauważ, że pierwszy :field.exists formularz staje się drugą formą przed wysłaniem do MongoDB; Wspominam o tym, ponieważ nie będziesz mógł użyć :field gdzie indziej w zapytaniu bez użycia $and lub $or aby połączyć klauzule::field.exists rozwinięcie może prowadzić do tego, że klucze w zapytaniu Hash zastępują się wzajemnie. Nie będziesz mieć tutaj tego problemu, ale przypomnienie nie zaszkodzi.
Szukam true jest łatwe:
Model.where(:field => true)
Chcesz któryś z nich, więc połącz je z $or
:
Model.where(:$or => [
{ :field.exists => false },
{ :field => true }
])
Jeśli :field może tam być, ale mieć null wartość wtedy możesz użyć { :field => nil } aby dopasować dokumenty, gdzie :field jest null lub w ogóle nie ma:
Model.where(:$or => [
{ :field => null },
{ :field => true }
])
# or
Model.where(:field.in => [ null, true ]) # This is probably the one you want
Istnieje również { :field => { :$type => 10 } } jeśli szukasz rzeczy, które tam są i jawnie null . Teraz może być dobry moment na szybkie zapoznanie się z najczęściej zadawanymi pytaniami MongoDB: