Ich verwende in Mongo eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung, ähnlich wie bei https://stackoverflow.com/q/5500823/1028488 .
dh ich benutze einen regulären Ausdruck mit Optionen i. Aber ich habe Probleme, den regulären Ausdruck auf nur dieses Wort zu beschränken. Er funktioniert eher wie ein "Gefällt mir" in SQL
Beispiel: Wenn ich Abfragen wie verwende
{"SearchWord" : { '$regex' : 'win', $options: '-i' }}
, werden mir Ergebnisse für Gewinn, Fenster und Winter angezeigt. Wie beschränke ich es auf jsut show win?
Ich habe es versucht, /^win$/
aber es ist ein ungültiger Json. Bitte schlagen Sie einen Weg vor.
Danke im Voraus
quelle
UPDATE : Ab MongoDB 2.4 würde man dazu einen "Text" -Index und eine Volltextsuchabfrage verwenden. Sie können über sie lesen hier . Wenn Sie eine aktuelle MongoDB verwenden, wäre der folgende Ansatz albern und unnötig.
Wenn Sie jedoch MongoDB <2.4.0 haben, können Sie einen regulären Ausdruck wie folgt verwenden:
> db.reg.insert({searchword: "win"}) > db.reg.insert({searchword: "window"}) > db.reg.insert({searchword: "Win"}) > db.reg.find() { "_id" : ObjectId("4ecd2e33dd68c9021e453d12"), "searchword" : "win" } { "_id" : ObjectId("4ecd2e36dd68c9021e453d13"), "searchword" : "window" } { "_id" : ObjectId("4ecd2e39dd68c9021e453d14"), "searchword" : "Win" } > db.reg.find({ searchword: /^win$/i }) { "_id" : ObjectId("4ecd2e33dd68c9021e453d12"), "searchword" : "win" } { "_id" : ObjectId("4ecd2e39dd68c9021e453d14"), "searchword" : "Win" }
Ihre Version funktionierte jedoch nicht, da Sie bei Verwendung des Operators $ regex keine "/" benötigen:
> db.reg.find({ searchword: { $regex: "^win$", $options: '-i' }}) { "_id" : ObjectId("4ecd2e33dd68c9021e453d12"), "searchword" : "win" } { "_id" : ObjectId("4ecd2e39dd68c9021e453d14"), "searchword" : "Win" }
Beachten Sie, dass bei Abfragen ohne Berücksichtigung der Groß- und Kleinschreibung der Index nicht verwendet wird. Daher ist es möglicherweise sinnvoll, ein Suchwortfeld in Kleinbuchstaben zu erstellen, damit Sie diese Abfrage beschleunigen können.
Gehen Sie hier für weitere Informationen über Regular
quelle
Verwenden Sie $ strcasecmp. Das Aggregationsframework wurde in MongoDB 2.2 eingeführt. Sie können den Zeichenfolgenoperator "$ strcasecmp" verwenden, um einen Vergleich zwischen Zeichenfolgen ohne Berücksichtigung der Groß- und Kleinschreibung durchzuführen. Es ist empfehlenswerter und einfacher als die Verwendung von Regex.
Hier ist das offizielle Dokument zum Aggregationsbefehlsoperator: https://docs.mongodb.com/manual/reference/operator/aggregation/strcasecmp/#exp._S_strcasecmp .
quelle
Für Groß- und Kleinschreibung nicht berücksichtigen
db.users.find({"name":{ $regex : new RegExp("Vi", "i") }})
Für Groß- und Kleinschreibung
db.users.find({"name":"Vi"}) // or db.users.find({"email":"[email protected]"})
Suche in Benutzertabelle
Name ist Spaltenname und "Vi" -Text, die durchsucht werden
quelle