Expressions régulières MongoDB
L'expression régulière utilise une seule chaîne pour décrire et faire correspondre une série de chaînes qui correspondent à une certaine règle de syntaxe.
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 $regex pour définir une expression régulière qui correspond à une chaîne.
MongoDB utilise PCRE (Perl Compatible Regular Expression) comme langage d'expression régulière.
Contrairement à la recherche en texte intégral, nous n'avons besoin d'effectuer aucune configuration lors de l'utilisation d'expressions régulières.
Considérez la structure du document de la collection posts suivante, qui contient le contenu de l'article et les balises :
{ "post_text": "enjoy the mongodb articles on tutorialspoint", "tags": [ "mongodb", "tutorialspoint" ] }
Utilisez l'expression régulière
ci-dessous La commande utilise une expression régulière pour rechercher les articles contenant la chaîne w3cschool.cc :
>db.posts.find({post_text:{$regex:"w3cschool.cc"}})
La requête ci-dessus peut également être écrite comme :
>db.posts.find({post_text:/w3cschool.cc/})
Expression régulière insensible à la casse
Si la recherche doit être insensible à la casse, nous pouvons définir $options sur $i.
La commande suivante trouvera la chaîne insensible à la casse w3cschool.cc :
>db.posts.find({post_text:{$regex:"w3cschool.cc",$options:"$i"}})
Toutes les données contenant la chaîne w3cschool.cc seront renvoyées dans la collection et ne seront pas sensibles à la casse :
{ "_id" : ObjectId("53493d37d852429c10000004"), "post_text" : "hey! this is my post on W3Cschool.cc", "tags" : [ "tutorialspoint" ] }
Éléments du tableau à l'aide d'expressions régulières
Nous pouvons également utiliser des expressions régulières dans les champs du tableau pour trouver du contenu. Ceci est très utile dans l'implémentation de balises, si vous avez besoin de trouver des données de balise commençant par tutoriel (tutoriel ou tutoriels ou tutorielpoint ou tutorielphp), Vous pouvez utiliser le code suivant :
>db.posts.find({tags:{$regex:"tutorial"}})
Optimiser la requête d'expression régulière
Si les champs de votre document sont indexés, alors utiliser des index est préférable aux expressions régulières La correspondance d'expression trouve toutes les données pour des temps de requête plus rapides.
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 , l'instruction de requête trouvera la chaîne commençant par tut.
Il y a deux points à noter lors de l'utilisation d'expressions régulières :
Les variables sont utilisées dans les expressions régulières. Vous devez utiliser eval pour convertir la chaîne combinée. Vous ne pouvez pas concaténer directement la chaîne et la transmettre dans l'expression. Sinon, aucun message d'erreur n'est signalé, mais le résultat est vide ! Les exemples sont les suivants :
var name=eval("/" + 变量值key +"/i");
Ce qui suit est une requête floue qui contient le mot-clé de titre et n'est pas sensible à la casse :
title:eval("/"+title+"/i") // 等同于 title:{$regex:title,$Option:"$i"}