Latest web development tutorials

MongoDB regex

Les expressions régulières sont utilisées pour décrire l'utilisation d'une seule chaîne, en ligne avec une série de règles syntaxiques chaîne de match.

De nombreux langages de programmation prennent en charge l'utilisation des expressions régulières pour les opérations de chaîne.

MongoDB utilise $ opérateur regex pour définir la chaîne correspondant à l' expression régulière.

MongoDB utilise PCRE (Expression régulière Perl Compatible) comme langue d'expression régulière.

Contrairement à la recherche plein texte, nous utilisons une expression régulière n'a pas besoin de faire de configuration.

Considérons la structure du document ensemble de messages suivants, le document contient le contenu de l'article et l'étiquette:

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

Utilisation d'expressions régulières

Les commandes suivantes utilisent des expressions régulières pour trouver l'article contient des chaînes w3cschool.cc:

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

La requête ci-dessus peut également être écrit comme:

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

expressions régulières insensible à la casse

Si vous avez besoin de récupérer un insensible à la casse, nous pouvons définir les options de $ que $ i.

La commande suivante trouvera insensible à la casse chaîne w3cschool.cc:

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

La collection sera de retour toutes les données contenant le w3cschool.cc de chaîne ne sont pas sensibles à la casse:

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

Les éléments de tableau en utilisant des expressions régulières

Nous pouvons également utiliser des expressions régulières dans le champ du tableau pour trouver le contenu. Ceci est utile dans la réalisation de l'étiquette, si vous avez besoin de trouver l'étiquette contient des données (tutoriel ou des tutoriels ou tutorialpoint ou tutorialphp) tutoriel au début, vous pouvez utiliser le code suivant:

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

Optimisation d'expressions régulières requête

  • Si votre champ d'index de document est défini, alors l'utilisation de l'indice par rapport à l'expression régulière correspondant pour trouver toutes les données des requêtes plus rapidement.

  • Si l'expression régulière est une expression de préfixe, toutes les données correspondantes seront spécifiées chaîne de préfixe pour commencer. Par exemple: Si l'expression régulière est ^ tut, tut recherche se penchera sur le début de la chaîne.

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

Les expressions régulières en utilisant des variables. Assurez-vous d'utiliser une combinaison de chaîne eval convertira après ne peuvent être directement transmis à l'expression de concaténation. Sinon, il n'y a pas de message d'erreur, mais le résultat est vide! Des exemples sont les suivants:

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

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

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