Expresión regular de MongoDB (Regex) con ejemplos

Las expresiones regulares se utilizan para la coincidencia de patrones, que es básicamente para cadenas de resultados dentro de documentos.

A veces, al recuperar documentos de una colección, es posible que no sepa exactamente cuál es el valor de campo exacto que debe buscar. Por lo tanto, se pueden utilizar expresiones regulares para ayudar a recuperar datos basados ​​en valores de búsqueda de coincidencia de patrones.

Usando el operador $regex para la coincidencia de patrones

El operador de expresiones regulares en MongoDB se utiliza para buscar cadenas específicas en la colección. el siguientewing El ejemplo muestra cómo se puede hacer esto.

Supongamos que tenemos nuestra misma colección de Empleados que tiene los nombres de campo "Employeeid" y "EmployeeName". Supongamos también que tenemos lo siguientewing documentos de nuestra colección.

ID de empleado Nombre de empleado
22 nuevomartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Viejo

Aquí, en el siguiente código, hemos utilizado el operador de expresiones regulares para especificar los criterios de búsqueda.

Uso del operador $regex para la coincidencia de patrones

db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)

Explicación del código:

  1. Aquí queremos encontrar todos los nombres de empleados que tengan los caracteres "Gu". Por lo tanto, especificamos el operador $regex para definir los criterios de búsqueda de 'Gu'
  2. printjson se utiliza para imprimir mejor cada documento devuelto por la consulta.

Si el comando se ejecuta correctamente, lo siguientewing Se mostrará el resultado:

Salida:

Uso del operador $regex para la coincidencia de patrones

El resultado muestra claramente que se devuelven aquellos documentos en los que el nombre del empleado contiene los caracteres "Gu".

Si supongamos que su colección tiene lo siguientewing documentos con un documento adicional que contenía el nombre del empleado como "Guru999". Si ingresó el criterio de búsqueda como "Guru99", también devolverá el documento que tenía "Guru999". Pero supongamos que no quisiéramos esto y solo quisiéramos devolver el documento con "Guru99". Entonces podemos hacer esto con una coincidencia exacta de patrones. Para hacer una coincidencia exacta de patrones, usaremos los caracteres ^ y $. Agregaremos el carácter ^ al principio de la cadena y $ al final de la cadena.

ID de empleado Nombre de empleado
22 nuevomartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Viejo
8 Guru999

El following El ejemplo muestra cómo se puede hacer esto.

Uso del operador $regex para la coincidencia de patrones

db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)

Explicación del código:

  1. Aquí, en los criterios de búsqueda, utilizamos los caracteres ^ y $. ^ se usa para asegurarse de que la cadena comience con un carácter determinado y $ se usa para garantizar que la cadena termine con un carácter determinado. Entonces, cuando se ejecute el código, solo buscará la cadena con el nombre "Guru99".
  2. printjson se utiliza para imprimir mejor cada documento devuelto por la consulta.

Si el comando se ejecuta correctamente, lo siguientewing Se mostrará el resultado:

Salida:

Uso del operador $regex para la coincidencia de patrones

En el resultado, es claramente visible que se recupera la cadena "Guru99".

Coincidencia de patrones con $options

Al utilizar el operador de expresiones regulares, también se pueden proporcionar opciones adicionales utilizando el $ opciones palabra clave. Por ejemplo, supongamos que desea encontrar todos los documentos que tengan "Gu" en su nombre de empleado, independientemente de si distinguen entre mayúsculas y minúsculas o no. Si se desea tal resultado, entonces necesitamos usar el $ opciones con parámetro de insensibilidad a mayúsculas y minúsculas.

El following El ejemplo muestra cómo se puede hacer esto.

Supongamos que tenemos nuestra misma colección de Empleados que tiene los nombres de campo "Employeeid" y "EmployeeName".

Supongamos también que tenemos lo siguientewing documentos de nuestra colección.

ID de empleado Nombre de empleado
22 nuevomartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Viejo
7 Guru99

Ahora, si ejecutamos la misma consulta que en el último tema, nunca veremos el documento con "GURU99" en el resultado. Para garantizar que esto aparezca en el conjunto de resultados, debemos agregar el parámetro "I" de $options.

Coincidencia de patrones con $options

db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)

Explicación del código:

  1. Las $options con parámetro 'I' (que significa insensibilidad a mayúsculas y minúsculas) especifica que queremos realizar la búsqueda sin importar si encontramos las letras 'Gu' en minúsculas o mayúsculas.

Si el comando se ejecuta correctamente, lo siguientewing Se mostrará el resultado:

Salida:

Coincidencia de patrones con $options

  1. El resultado muestra claramente que aunque un documento tenga la mayúscula "Gu", el documento aún se muestra en el conjunto de resultados.

Coincidencia de patrones sin el operador de expresiones regulares

También se puede hacer coincidencia de patrones sin el operador de expresiones regulares. el siguientewing El ejemplo muestra cómo se puede hacer esto.

Coincidencia de patrones sin el operador Regex

db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)

Explicación del código:

  1. Las opciones “//” básicamente significan especificar sus criterios de búsqueda dentro de estos delimitadores. Por lo tanto, estamos especificando /Gu/ para buscar nuevamente aquellos documentos que tienen 'Gu' en su Nombre de Empleado.

Si el comando se ejecuta correctamente, lo siguientewing Se mostrará el resultado:

Salida:

Coincidencia de patrones sin el operador Regex

El resultado muestra claramente que se devuelven aquellos documentos en los que el nombre del empleado contiene los caracteres "Gu".

Obteniendo los últimos 'n' documentos de una colección

Hay varias formas de obtener los últimos n documentos de una colección.

Veamos una de las formas a través del siguientewing pasos

El following El ejemplo muestra cómo se puede hacer esto.

Supongamos que tenemos nuestra misma colección de Empleados que tiene los nombres de campo "Employeeid" y "EmployeeName".

Supongamos también que tenemos lo siguientewing documentos de nuestra colección:

ID de empleado Nombre de empleado
22 nuevomartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Viejo
7 Guru99

Obteniendo los últimos 'n' documentos de una colección

db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Explicación del código:

1) Al consultar los documentos, utilice la función de clasificación para ordenar los registros en orden inverso según el valor del campo _id en la colección. El -1 básicamente indica ordenar los documentos en orden inverso o descendente para que el último documento se convierta en el primer documento que se mostrará.

2) Luego use la cláusula de límite para mostrar solo la cantidad de registros que desea. Aquí hemos establecido la cláusula límite (2), por lo que recuperará los dos últimos documentos.

Si el comando se ejecuta correctamente, lo siguientewing Se mostrará el resultado:

Salida:

Obteniendo los últimos 'n' documentos de una colección

El resultado muestra claramente que se muestran los dos últimos documentos de la colección. Por lo tanto, hemos demostrado claramente que para recuperar los últimos 'n' documentos de la colección, primero podemos ordenar los documentos en orden descendente y luego usar la cláusula de límite para devolver el 'n' número de documentos necesarios.

Note: Si la búsqueda se realiza en una cadena que tiene más de, digamos, 38,000 caracteres, no mostrará los resultados correctos.

Resumen

  • El operador $regex puede lograr la coincidencia de patrones. Este operador se puede utilizar para buscar determinadas cadenas en la colección.
  • Los símbolos ^ y $ se pueden usar para búsquedas de texto exacto; ^ se usa para asegurarse de que la cadena comience con un carácter determinado y $ se usa para garantizar que la cadena termine con un carácter determinado.
  • La 'i' junto con el operador $regex se puede usar para especificar que no se distinguen entre mayúsculas y minúsculas, de modo que se puedan buscar cadenas ya sea que estén en minúsculas o mayúsculas.
  • Los delimitadores // también se pueden utilizar para la coincidencia de patrones.
  • Utilice una combinación de clasificación y función de límite para devolver los últimos n documentos de la colección. La función de clasificación se puede utilizar para devolver los documentos en orden descendente, después de lo cual se puede utilizar la cláusula de límite para limitar la cantidad de documentos que se devuelven.