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: