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
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
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 /
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
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 .
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
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