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/
Puede usar ''$regex'':''^win$''
o /^win$/i
(note que no hay comillas en el segundo)
Fuente aquí: Regex en consultas con Mongo
Use $ strcasecmp. El marco de agregación se introdujo en MongoDB 2.2. Puede usar el operador de cadena "$ strcasecmp" para hacer una comparación entre cadenas que no distinga entre mayúsculas y minúsculas. Es más recomendado y más fácil que usar regex.
Aquí está el documento oficial en el operador del comando de agregación: https://docs.mongodb.com/manual/reference/operator/aggregation/strcasecmp/#exp._S_strcasecmp .
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