insensitive accents regex mongodb pattern-matching match case-insensitive

regex - accents - Búsqueda insensible a mayúsculas/minúsculas en Mongo



regex mongodb accents (5)

Para mayúsculas y minúsculas db.users.find ({"nombre": {$ regex: nuevo RegExp ("Vi", "i")}})

Para mayúsculas / minúsculas db.users.find ({"nombre": "Vi"}) o db.users.find ({"email": "[email protected]"})

buscar en la tabla de usuario

el nombre es el nombre de columna y el texto "Vi" que se buscan

Estoy usando una búsqueda insensible a mayúsculas / minúsculas en Mongo, algo similar a https://stackoverflow.com/q/5500823/1028488 .

es decir, estoy usando una expresión regular con opciones i. Pero estoy teniendo problemas para restringir la expresión regular a solo esa palabra, se comporta más como un ''me gusta'' en SQL

Por ejemplo: si uso una consulta como {"SearchWord" : { ''$regex'' : ''win'', $options: ''-i'' }} , me muestra resultados para win, window & winter. ¿Cómo lo restrinjo a jsut show win?

Intenté /^win$/ pero dice JSON no válido ... Por favor sugiera una manera.

Gracias por adelantado


Puede usar $options => i para búsqueda insensible a mayúsculas y minúsculas. Dando algunos posibles ejemplos necesarios para la coincidencia de cadenas.

string exacta insensible a mayúsculas y minúsculas

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

Contiene string

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

Comience con una string

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

Terminar con una string

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

No contiene string

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

Mantenga esto como un marcador y una referencia para cualquier otra alteración que pueda necesitar. http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/




ACTUALIZACIÓN : a partir de MongoDB 2.4 se usaría un índice de "texto" y una consulta de búsqueda de texto completo para hacer esto. Puedes leer sobre ellos here . Si utiliza un MongoDB reciente, el siguiente enfoque sería tonto e innecesario.

Sin embargo, si tienes MongoDB <2.4.0, podrías usar una expresión regular como esta:

> 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" }

Sin embargo, su versión no funcionaba porque no necesita los "/" cuando usa el operador $ regex:

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

Tenga en cuenta que las consultas que no distinguen entre mayúsculas y minúsculas no usan el índice, por lo que podría tener sentido crear un campo de palabras clave de búsqueda minúsculas para que pueda acelerar esa consulta.

Vaya aquí para obtener más información sobre RegularExpressions