Um Dokumente zu finden, die nicht einen bestimmten Schlüssel haben, möchten Sie $exists
:
Die Existenzprüfung würde also folgendermaßen aussehen:
Model.where(:field.exists => false)
Model.where(:field => { :$exists => false })
Beachten Sie, dass das erste :field.exists
ist Formular wird zum zweiten Formular, bevor es an MongoDB gesendet wird; Ich erwähne dies, weil Sie :field
nicht verwenden können an anderer Stelle in der Abfrage, ohne $and
zu verwenden oder $or
um die Klauseln zu kombinieren:die :field.exists
Die Erweiterung kann dazu führen, dass sich Schlüssel im Abfrage-Hash gegenseitig überschreiben. Sie werden dieses Problem hier nicht haben, aber eine Erinnerung kann nicht schaden.
Suche nach true
ist einfach:
Model.where(:field => true)
Sie möchten eines von beiden, also kombinieren Sie sie mit $or
:
Model.where(:$or => [
{ :field.exists => false },
{ :field => true }
])
Wenn :field
könnte vorhanden sein, aber einen null
haben Wert, dann könnten Sie { :field => nil }
verwenden zum Abgleichen von Dokumenten mit :field
ist null
oder gar nicht da:
Model.where(:$or => [
{ :field => null },
{ :field => true }
])
# or
Model.where(:field.in => [ null, true ]) # This is probably the one you want
Es gibt auch { :field => { :$type => 10 } }
wenn Sie nach Dingen suchen, die und da sind explizit null
. Jetzt ist vielleicht ein guter Zeitpunkt für einen kurzen Überblick über die häufig gestellten Fragen zu MongoDB: