webentwicklung-frage-antwort-db.com.de

Groß- und Kleinschreibung wird nicht in Mongo gesucht

Ich verwende eine Groß-/Kleinschreibung in Mongo, ähnlich wie https://stackoverflow.com/q/5500823/1028488 .

dh ich benutze einen Regex mit Optionen i. Ich habe jedoch Schwierigkeiten, die Regex auf das Wort Word zu beschränken, das in SQL eher wie "Gefällt mir" wirkt 

beispiel: Wenn ich die Abfrage wie {"SearchWord" : { '$regex' : 'win', $options: '-i' }} verwende, werden die Ergebnisse für win, window & winter angezeigt. Wie kann ich es auf den Show-Sieg beschränken?

Ich habe versucht, /^win$/, aber es ist ungültig Json .... Bitte schlagen Sie einen Weg vor.

Danke im Voraus

44
Praneeta

Sie können '$regex':'^win$' oder /^win$/i verwenden.

Quelle hier: Regex in Fragen mit Mongo

44
AlphaB

Sie können $options => i für Suche ohne Berücksichtigung der Groß-/Kleinschreibung. Nennen Sie einige mögliche Beispiele, die für die String-Übereinstimmung erforderlich sind.

Genaue Berücksichtigung der Groß- und Kleinschreibung string

db.collection.find({name:{'$regex' : '^string$', '$options' : 'i'}})

Enthält string

db.collection.find({name:{'$regex' : 'string', '$options' : 'i'}})

Beginnen Sie mit string

db.collection.find({name:{'$regex' : '^string', '$options' : 'i'}})

Beenden Sie mit string

db.collection.find({name:{'$regex' : 'string$', '$options' : 'i'}})

Enthält nicht string

db.collection.find({name:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})

Behalten Sie dies als Lesezeichen und als Referenz für andere Änderungen, die Sie möglicherweise benötigen. http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

96
Somnath Muluk

UPDATE: Ab MongoDB 2.4 würde man hierfür einen "Text" -Index und eine Volltextsuche verwenden. Sie können über sie hier lesen. Wenn Sie eine aktuelle MongoDB verwenden, wäre der folgende Ansatz dumm und unnötig.

Wenn Sie jedoch über MongoDB <2.4.0 verfügen, 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 der Verwendung des $ regex-Operators keine "/" benötigen:

> db.reg.find({ searchword: { $regex: "^win$", $options: '-i' }})
{ "_id" : ObjectId("4ecd2e33dd68c9021e453d12"), "searchword" : "win" }
{ "_id" : ObjectId("4ecd2e39dd68c9021e453d14"), "searchword" : "Win" }

Beachten Sie, dass Abfragen, bei denen die Groß- und Kleinschreibung nicht beachtet wird, den Index nicht verwenden. Es kann daher sinnvoll sein, ein Suchfeld in Kleinbuchstaben zu erstellen, damit Sie diese Abfrage beschleunigen können.

Weitere Informationen zu RegularExpressions erhalten Sie hier

18
Tyler Brock

Verwenden Sie $ strcasecmp. Das Aggregations-Framework wurde in MongoDB 2.2 eingeführt. Sie können den Zeichenfolgenoperator "$ strcasecmp" verwenden, um einen Vergleich der Zeichenfolgen zwischen Groß- und Kleinschreibung zu machen. Es ist empfehlenswerter und einfacher als die Verwendung von Regex.

Hier das offizielle Dokument zum Aggregationsbefehlsoperator: https://docs.mongodb.com/manual/reference/operator/aggregation/strcasecmp/#exp._S_strcasecmp .

0
Jogue Wasin