MongoDB - Expresión regular

Las expresiones regulares se utilizan con frecuencia en todos los idiomas para buscar un patrón o una palabra en cualquier cadena. MongoDB también proporciona la funcionalidad de expresión regular para la coincidencia de patrones de cadena utilizando el$regexoperador. MongoDB usa PCRE (Perl Compatible Regular Expression) como lenguaje de expresión regular.

A diferencia de la búsqueda de texto, no necesitamos realizar ninguna configuración o comando para usar expresiones regulares.

Supongamos que hemos insertado un documento en una base de datos llamada posts como se muestra a continuación -

> db.posts.insert(
{
   "post_text": "enjoy the mongodb articles on tutorialspoint",
   "tags": [
      "mongodb",
      "tutorialspoint"
   ]
}
WriteResult({ "nInserted" : 1 })

Usar expresión de regex

La siguiente consulta de expresiones regulares busca todas las publicaciones que contienen cadenas tutorialspoint en ella -

> db.posts.find({post_text:{$regex:"tutorialspoint"}}).pretty()
{
	"_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
	"post_text" : "enjoy the mongodb articles on tutorialspoint",
	"tags" : [
		"mongodb",
		"tutorialspoint"
	]
}
{
	"_id" : ObjectId("5dd7d111f1dd4583e7103fe2"),
	"post_text" : "enjoy the mongodb articles on tutorialspoint",
	"tags" : [
		"mongodb",
		"tutorialspoint"
	]
}
>

La misma consulta también se puede escribir como:

>db.posts.find({post_text:/tutorialspoint/})

Uso de expresiones regulares con mayúsculas y minúsculas

Para que la búsqueda no distinga entre mayúsculas y minúsculas, utilizamos la $options parámetro con valor $i. El siguiente comando buscará cadenas que tengan la palabratutorialspoint, independientemente del caso menor o capital -

>db.posts.find({post_text:{$regex:"tutorialspoint",$options:"$i"}})

Uno de los resultados devueltos por esta consulta es el siguiente documento que contiene la palabra tutorialspoint en diferentes casos -

{
   "_id" : ObjectId("53493d37d852429c10000004"),
   "post_text" : "hey! this is my post on TutorialsPoint", 
   "tags" : [ "tutorialspoint" ]
}

Uso de expresiones regulares para elementos de matriz

También podemos usar el concepto de expresión regular en el campo de matriz. Esto es particularmente muy importante cuando implementamos la funcionalidad de las etiquetas. Por lo tanto, si desea buscar todas las publicaciones que tengan etiquetas a partir de la palabra tutorial (ya sea tutorial o tutoriales o tutorialpoint o tutorialphp), puede usar el siguiente código:

>db.posts.find({tags:{$regex:"tutorial"}})

Optimización de consultas de expresiones regulares

  • Si los campos del documento son indexed, la consulta utilizará valores indexados para coincidir con la expresión regular. Esto hace que la búsqueda sea muy rápida en comparación con la expresión regular que escanea toda la colección.

  • Si la expresión regular es una prefix expression, todas las coincidencias deben comenzar con una determinada cadena de caracteres. Por ejemplo, si la expresión regex es^tut, entonces la consulta debe buscar solo aquellas cadenas que comienzan con tut.