Búsqueda insensible a mayúsculas y minúsculas en Mongo


Estoy usando una búsqueda que no distingue entre mayúsculas y 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 realiza más como un 'Me gusta' en SQL

Eg: si utilizo query like {"SearchWord" : { '$regex' : 'win', $options: '-i' }}, me muestra los resultados de win, window & winter. ¿Cómo lo restrinjo a jsut show win?

He intentado /^win$/ pero su sayin no es válido Json.... Por favor sugiera una manera.

Gracias de antemano

Author: Community, 2011-11-23

5 answers

Puede usar '$regex':'^win$' o /^win$/i (no note la cita en el segundo)

Fuente aquí: Expresión regular en consultas con Mongo

 38
Author: AlphaB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-23 17:11:11

Puede Usar $options => i para la búsqueda que no distingue entre mayúsculas y minúsculas. Dando algunos ejemplos posibles requeridos para la coincidencia de cadenas.

Insensible a mayúsculas y minúsculas string

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

Contiene string

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

Comienza con string

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

Termina con 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 /

 69
Author: Somnath Muluk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-16 09:27:31

UPDATE: A partir de MongoDB 2.4 uno usaría un índice de "texto" y una consulta de búsqueda de texto completo para hacer esto. Puedes leer sobre ellos aquí . Si se usa un MongoDB reciente, el siguiente enfoque sería tonto e innecesario.

Sin embargo, si tienes MongoDB

> 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 estaba funcionando porque no necesita los "/ " s cuando usa el operador reg 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 insensibles a mayúsculas y minúsculas no use el índice, por lo que podría tener sentido crear un campo de palabra de búsqueda en minúsculas para que pueda acelerar esa consulta.

Ir aquí para más información sobre RegularExpressions

 17
Author: Tyler Brock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-08 20:59:30

Use str strcasecmp. El marco de agregación se introdujo en MongoDB 2.2. Puede usar el operador de cadena "str strcasecmp" para hacer una comparación sin distinción de mayúsculas y minúsculas entre cadenas. Es más recomendable y más fácil que usar regex.

Aquí está el documento oficial sobre el operador de comando de agregación: https://docs.mongodb.com/manual/reference/operator/aggregation/strcasecmp/#exp._S_strcasecmp .

 0
Author: Jogue Wasin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-20 05:00:43

Para insensible a mayúsculas y minúsculas db.usuario.find ({"name": {reg regex: new RegExp ("Vi"," i")}})

Para distinguir entre mayúsculas y minúsculas db.usuario.buscar ({"nombre": "Vi"}) o db. users. find ({"email": "[email protected]"})

Buscar en la tabla de usuarios

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

 -1
Author: Vikas Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-20 13:17:06