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 usar expresiones regulares para ayudar a recuperar datos basados en valores de búsqueda de coincidencia de patrones.
En este tutorial, aprenderá:
- Usando el operador $ regex para la coincidencia de patrones
- Coincidencia de patrones con $ opciones
- Coincidencia de patrones sin el operador de expresiones regulares
- Obtener los últimos documentos de una colección
Usando el operador $ regex para la coincidencia de patrones
El operador de expresiones regulares en MongoDB se usa para buscar cadenas específicas en la colección. El siguiente ejemplo muestra cómo se puede hacer esto.
Supongamos que tenemos nuestra misma colección de empleados que tiene los nombres de campo de "Employeeid" y "EmployeeName". Supongamos también que tenemos los siguientes documentos en nuestra colección.
ID de empleado | Nombre de empleado |
22 | NewMartin |
2 | Mohan |
3 | José |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
Aquí, en el siguiente código, hemos utilizado el operador de expresiones regulares para especificar los criterios de búsqueda.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Explicación del código:
- Aquí queremos encontrar todos los nombres de empleados que tienen los caracteres 'Gu'. Por lo tanto, especificamos el operador $ regex para definir los criterios de búsqueda de 'Gu'
- El printjson se está utilizando para imprimir cada documento que devuelve la consulta de una mejor manera.
Si el comando se ejecuta con éxito, se mostrará la siguiente salida:
Producción:
El resultado muestra claramente que se devuelven aquellos documentos en los que el nombre del empleado contiene los caracteres 'Gu'.
Suponga que su colección tiene los siguientes documentos con un documento adicional que contenía el nombre del empleado como "Guru999". Si ingresó los criterios de búsqueda como "Guru99", también devolvería 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 el carácter y $. Agregaremos el carácter al principio de la cadena y $ al final de la cadena.
ID de empleado | Nombre de empleado |
22 | NewMartin |
2 | Mohan |
3 | José |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
8 | Guru999 |
El siguiente ejemplo muestra cómo se puede hacer esto.
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
Explicación del código:
- Aquí, en los criterios de búsqueda, usamos el carácter y $. Se usa para asegurarse de que la cadena comience con un cierto carácter, y $ se usa para asegurarse de que la cadena termine con un cierto carácter. Entonces, cuando el código se ejecute, solo obtendrá la cadena con el nombre "Guru99".
- El printjson se está utilizando para imprimir cada documento que devuelve la consulta de una mejor manera.
Si el comando se ejecuta con éxito, se mostrará la siguiente salida:
Producción:
En la salida, es claramente visible que se obtiene la cadena "Guru99".
Coincidencia de patrones con $ opciones
Cuando se usa el operador de expresiones regulares, también se pueden proporcionar opciones adicionales usando la palabra clave $ options . Por ejemplo, suponga que desea buscar todos los documentos que tienen "Gu" en su nombre de empleado, independientemente de si se distingue entre mayúsculas y minúsculas. Si se desea tal resultado, entonces necesitamos usar las opciones $ con el parámetro de insensibilidad a mayúsculas y minúsculas.
El siguiente ejemplo muestra cómo se puede hacer esto.
Supongamos que tenemos nuestra misma colección de empleados que tiene los nombres de campo de "Employeeid" y "EmployeeName".
Supongamos también que tenemos los siguientes documentos en nuestra colección.
ID de empleado | Nombre de empleado |
22 | NewMartin |
2 | Mohan |
3 | José |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
Ahora, si ejecutamos la misma consulta que en el último tema, nunca veríamos el documento con "GURU99" en el resultado. Para asegurarnos de que esto venga en el conjunto de resultados, necesitamos agregar el parámetro $ options "I".
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Explicación del código:
- Las opciones $ con el parámetro 'I' (que significa insensibilidad a mayúsculas y minúsculas) especifican que queremos realizar la búsqueda sin importar si encontramos las letras 'Gu' en minúsculas o mayúsculas.
Si el comando se ejecuta con éxito, se mostrará la siguiente salida:
Producción:
- El resultado muestra claramente que, aunque un documento tiene la letra 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 pueden realizar coincidencias de patrones sin el operador de expresiones regulares. El siguiente ejemplo muestra cómo se puede hacer esto.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
Explicación del código:
- Las opciones "//" básicamente significan especificar sus criterios de búsqueda dentro de estos delimitadores. Por lo tanto, estamos especificando / Gu / para encontrar nuevamente aquellos documentos que tienen 'Gu' en su EmployeeName.
Si el comando se ejecuta con éxito, se mostrará la siguiente salida:
Producción:
El resultado muestra claramente que se devuelven aquellos documentos en los que el nombre del empleado contiene los caracteres 'Gu'.
Obtener los últimos 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 de los siguientes pasos.
El siguiente ejemplo muestra cómo se puede hacer esto.
Supongamos que tenemos nuestra misma colección de empleados que tiene los nombres de campo de "Employeeid" y "EmployeeName".
Supongamos también que tenemos los siguientes documentos en nuestra colección:
ID de empleado | Nombre de empleado |
22 | NewMartin |
2 | Mohan |
3 | José |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)
Explicación del código:
1) Al consultar los documentos, use 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 en mostrarse.
2) Luego use la cláusula de límite para mostrar el número de registros que desea. Aquí hemos establecido la cláusula de límite (2), por lo que buscará los dos últimos documentos.
Si el comando se ejecuta con éxito, se mostrará la siguiente salida:
Producción:
El resultado muestra claramente que se muestran los dos últimos documentos de la colección. Por lo tanto, hemos demostrado claramente que para obtener 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 que se requieren.
Nota : Si la búsqueda se realiza en una cadena de 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 de la colección.
- El símbolo y $ se pueden usar para búsquedas de texto exactas, usándose para asegurarse de que la cadena comience con un determinado carácter y $ para asegurarse de que la cadena termine con un cierto carácter.
- La 'i' junto con el operador $ regex se puede utilizar para especificar la insensibilidad a mayúsculas y minúsculas, de modo que las cadenas se puedan buscar tanto si están en minúsculas como en mayúsculas.
- Los delimitadores // también se pueden utilizar para la coincidencia de patrones.
- Utilice una combinación de ordenación y la 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 el número de documentos que se devuelven.