MongoDB proporciona la funcionalidad para buscar un patrón en una string durante una consulta escribiendo una expresión regular . Una expresión regular es una forma generalizada de hacer coincidir patrones con secuencias de caracteres. MongoDB utiliza expresiones regulares compatibles con Perl (PCRE) versión 8.42 junto con compatibilidad con UTF-8. En MongoDB, podemos hacer coincidencias de patrones de dos maneras diferentes:
- Con operador $regex
- Sin operador $regex
Coincidencia de patrones usando el operador $regex
Este operador proporciona funciones de expresión regular para coincidencias de patrones en las consultas. O, en otras palabras, este operador se usa para buscar la string dada en la colección especificada. Es útil cuando no sabemos el valor de campo exacto que estamos buscando en el documento. Por ejemplo, una colección que contiene 3 documentos, es decir,
{ name: "Tony", position: "Backend developer" } { name: "Bruce", position: "frontend developer" } { name: "Nick", position: "HR Manager" }
y estamos buscando información del desarrollador. Entonces, con la ayuda del operador $regex, creamos un patrón (es decir, {posición: {$regex: «desarrollador»}}) que devolverá solo aquellos documentos que contengan una string de desarrollador.
Puntos importantes:
- No está permitido usar el operador $regex dentro del operador $in.
- Si desea agregar una expresión regular dentro de una lista separada por comas de una condición de consulta, debe usar el operador $regex.
- Si desea usar las opciones x y s, debe usar la expresión del operador $regex con $options.
- A partir de la última versión de MongoDB (es decir, 4.0.7), puede usar el operador $not con la expresión del operador $regex.
- Para las consultas de expresiones regulares que distinguen entre mayúsculas y minúsculas, si el índice del campo especificado está disponible, MongoDB hace coincidir la expresión regular con los valores del índice. Es la forma más fácil de hacer coincidir en lugar de escanear todas las colecciones. Para las consultas de expresiones regulares que no distinguen entre mayúsculas y minúsculas, no utilizan el índice de manera efectiva.
- Si desea utilizar expresiones regulares compatibles con Perl que admiten expresiones regulares que no son compatibles con JavaScript, debe utilizar el operador $regex.
Sintaxis:
{ <field>: { $regex: /pattern/, $options: '<options>' } } { <field>: { $regex: 'pattern', $options: '<options>' } }
$opciones:
En MongoDB, las siguientes <opciones> están disponibles para usar con expresiones regulares:
- i: Para hacer coincidir el patrón de minúsculas y mayúsculas en la string.
- m: Para incluir ^ y $en el patrón de la coincidencia, es decir, para buscar específicamente ^ y $dentro de la string. Sin esta opción, estos anclajes coinciden al principio o al final de la string.
- x: Para ignorar todos los espacios en blanco en el patrón $regex.
- s: para permitir el carácter de punto “.” para hacer coincidir todos los caracteres, incluidos los caracteres de nueva línea.
Ejemplos:
En los siguientes ejemplos, estamos trabajando con:
Base de datos: GeeksforGeeks
Colección: empleado
Documentos: Seis documentos que contienen los datos de los empleados en forma de pares campo-valor.
- Mostrando detalles del empleado que tiene la palabra desarrollador en su campo de posición:
db.employee.find({position : {$regex : "developer"}}).pretty()
Aquí, mostramos los documentos de aquellos empleados cuyo campo de posición contiene una string de desarrollador. Así que pasamos una expresión regular usando el operador $regex (es decir, {$regex: «desarrollador»}) para el campo de posición en el método find().
- Visualización de detalles de empleados que son ingenieros de software sin distinción entre mayúsculas y minúsculas mediante el uso de i <opciones>:
db.employee.find({position:{$regex:"software",$options:"$i"}}).pretty()
Aquí, mostramos los documentos de aquellos empleados cuyo campo de puesto contiene una string de «software» que no distingue entre mayúsculas y minúsculas. Entonces, pasamos una expresión regular con opción (es decir, {$regex: «software», $opciones: «$i»}) para el campo de posición en el método find(). En la expresión regular, $options:”$i” se usa para hacer coincidir el patrón de mayúsculas y minúsculas en la string dada (es decir, “software”).
- Mostrando detalles del empleado cuyo nombre comienza con B:
db.employee.find({Name:{$regex:"^B"}}).pretty()
Aquí, mostramos los documentos de aquellos empleados cuyo nombre comienza con la letra ‘B’. Entonces, pasamos una expresión regular usando el operador $regex (es decir, {$regex: “^B”}) para el campo Nombre en el método find().
- Mostrando detalles del empleado cuyo nombre termina con e:
db.employee.find({Name:{$regex:"e$"}}).pretty()
Aquí, mostramos los documentos de aquellos empleados cuyos nombres terminan con la letra ‘e’. Entonces, pasamos una expresión regular usando el operador $regex (es decir, {$regex: “e$”}) para el campo Nombre en el método find().
Coincidencia de patrones sin usar el operador $regex
En MongoDB, podemos hacer coincidencias de patrones sin usar el operador $regex. Simplemente, usando un objeto de expresión regular para especificar una expresión regular. Además, al usar el objeto de expresión regular, puede usar la expresión regular dentro del operador $in.
Sintaxis:
{ <field>: /pattern/<options> }
Aquí, // significa especificar su criterio de búsqueda entre estos delimitadores.
Ejemplo:
En los siguientes ejemplos, estamos trabajando con:
Base de datos: GeeksforGeeks
Colección: empleado
Documentos: Seis documentos que contienen los datos de los empleados en forma de pares campo-valor.
- Mostrar detalles del empleado que tiene la palabra «te» en su nombre mediante el uso de un objeto de expresión regular:
db.employee.find({Name: /te/}).pretty()
Aquí, mostramos los documentos de aquellos empleados cuyos nombres contienen la string «te». Entonces, pasamos una expresión regular (es decir, {Nombre: /te/}) para el campo Nombre en el método find(). En esta expresión regular, // significa especificar su criterio de búsqueda entre estos delimitadores, es decir, /te/.
Publicación traducida automáticamente
Artículo escrito por darksiderrohan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA