Die groß / Kleinschreibung bei der Suche nach Wörtern in mongoid
Gibt es eine Möglichkeit, ein Attribut in mongoid für case-insensitive suchen?
Sagen wir, jemand hat ein Benutzername: IAmGreat und ich will zu finden, die Daten der Nutzer mit Ihren einzigartigen Benutzernamen ohne Schlachten es und ändern, um iamgreat.
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum nicht einfach unten ein
User.login.downcase
(oder was auch immer Ihr Modell/Attribut-Kombination), wenn man einen Vergleich? Diese verlassen die groß-und Kleinschreibung in der DB ist, aber downcase das Feld nur zum Vergleich.Tatsächlich können Sie die Suche groß-und Kleinschreibung. Aber Sie haben eine Suche mit einem regex!
Hier ist ein Beispiel, wie ich es mit in http://www.VersionEye.com
Mit dem "/" Sie starten und beenden der regex. Das "i" nach der regex bedeutet, dass groß-und Kleinschreibung. "^" Bedeutet, dass das element zum start mit dem such-string und "$" bedeutet, das element hat ein Ende mit der such-string. Dies ist wichtig, wenn Sie sind auf der Suche nach einer genauen übereinstimmung.
/^#{Regexp.escape(email)}$/i
/i
ist der trickUser.where(name: /.*#{term_to_search}.*/i).to_a
die groß - / Kleinschreibung ignorieren in dem gegebenen stringKönnen Sie sogar versuchen, so etwas wie:
User.where(username: /^#{username}/i).first
(Hinweis: die^
)wenn Sie mit Schienen oder mongoid können Sie versuchen, die ff:
@user = User.where({:username => /.*#{name}.*/i })
Wenn Ihre Anwendung keine Notwendigkeit zum speichern der Benutzer-Eingabe case-sensitive, nur wandeln die Eingabe in groß-oder Kleinbuchstaben auf den Weg in. Beispiel
Ansonsten, wenn die Leistung ein Problem für Sie sein (groß- /Kleinschreibung regex nicht nutzen können, die für Indizes) der richtige Weg, um darüber zu gehen ist, zum speichern einer backup-Feld für Benutzername
Tun, und dann die Abfrage: