Expressions régulières

Une expression régulière est une chaîne unique utilisée pour décrire et faire correspondre une série de chaînes qui respectent une certaine règle syntaxique.

De nombreux langages de programmation prennent en charge les opérations sur les chaînes à l'aide d'expressions régulières.

MongoDB utilise l'opérateur$regexpour définir l'expression régulière de correspondance des chaînes.

MongoDB utilise PCRE (Perl Compatible Regular Expression) comme langage d'expressions régulières.

Contrairement à la recherche en texte intégral, l'utilisation d'expressions régulières ne nécessite aucune configuration.

Considérez la structure de documentpostssuivante de la collection, qui contient le contenu de l'article et les tags :

{
   "post_text": "enjoy the mongodb articles on example",
   "tags": [
      "mongodb",
      "example"
   ]
}

Utilisation des expressions régulières

La commande suivante utilise une expression régulière pour rechercher les articles contenant la chaîne example :

>db.posts.find({post_text:{$regex:"example"}})

La requête ci-dessus peut également s'écrire :

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

Expressions régulières insensibles à la casse

Si la recherche doit être insensible à la casse, nous pouvons définir $options sur $i.

La commande suivante trouvera la chaîne example sans tenir compte de la casse :

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

La collection renverra toutes les données contenant la chaîne example, sans tenir compte de la casse :

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

Utilisation des expressions régulières sur les éléments de tableau

Nous pouvons également utiliser des expressions régulières dans les champs de tableau pour rechercher du contenu. Cela est très utile dans l'implémentation des tags. Si vous devez rechercher des données de tag commençant par run (ru ou run ou example), vous pouvez utiliser le code suivant :

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

Optimisation des requêtes d'expressions régulières

  • Si un index est défini sur un champ de vos documents, l'utilisation de l'index est plus rapide que l'utilisation d'une expression régulière pour faire correspondre et trouver toutes les données.
  • Si l'expression régulière est une expression de préfixe, toutes les données correspondantes commenceront par la chaîne de préfixe spécifiée. Par exemple : Si l'expression régulière est ^tut , la requête recherchera les chaînes qui commencent par tut.

Il y a deux points à noter lors de l'utilisation d'expressions régulières ici :

Utilisation de variables dans les expressions régulières. Veillez à utiliser eval pour convertir la chaîne concaténée ; vous ne pouvez pas transmettre directement la chaîne concaténée à l'expression. Sinon, il n'y a pas de message d'erreur, juste un résultat vide ! Exemple ci-dessous :

var name=eval("/" + 变量值key +"/i"); 

Ce qui suit est une requête floue qui contient le mot-clé du titre et est insensible à la casse :

title:eval("/"+title+"/i")    // 等同于 title:{$regex:title,$Option:"$i"}   
Autres extensions