MongoDB - Expression régulière

Les expressions régulières sont fréquemment utilisées dans toutes les langues pour rechercher un modèle ou un mot dans n'importe quelle chaîne. MongoDB fournit également des fonctionnalités d'expression régulière pour la correspondance de modèle de chaîne à l'aide du$regexopérateur. MongoDB utilise PCRE (Perl Compatible Regular Expression) comme langage d'expression régulière.

Contrairement à la recherche de texte, nous n'avons pas besoin de faire de configuration ou de commande pour utiliser des expressions régulières.

Supposons que nous ayons inséré un document dans une base de données nommée posts comme indiqué ci-dessous -

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

Utilisation de l'expression regex

La requête regex suivante recherche tous les articles contenant une chaîne tutorialspoint dedans -

> 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 même requête peut également être écrite comme -

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

Utilisation de l'expression régulière avec insensible à la casse

Pour rendre la recherche insensible à la casse, nous utilisons le $options paramètre avec valeur $i. La commande suivante recherchera les chaînes contenant le mottutorialspoint, quel que soit le cas plus petit ou capital -

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

L'un des résultats renvoyés par cette requête est le document suivant qui contient le mot tutorialspoint dans différents cas -

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

Utilisation de regex pour les éléments de tableau

Nous pouvons également utiliser le concept de regex sur un champ de tableau. Ceci est particulièrement important lorsque nous implémentons la fonctionnalité des balises. Donc, si vous souhaitez rechercher tous les articles ayant des balises commençant par le mot tutoriel (soit tutoriel ou tutoriels ou tutorialpoint ou tutorialphp), vous pouvez utiliser le code suivant -

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

Optimiser les requêtes d'expression régulière

  • Si les champs du document sont indexed, la requête utilisera utiliser des valeurs indexées pour correspondre à l'expression régulière. Cela rend la recherche très rapide par rapport à l'expression régulière analysant toute la collection.

  • Si l'expression régulière est un prefix expression, toutes les correspondances sont censées commencer par certains caractères de chaîne. Par exemple, si l'expression regex est^tut, la requête doit rechercher uniquement les chaînes commençant par tut.