MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoid-Abfrage nach Wert oder Standardwert

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: