English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
正则表达式在所有语言中都经常用于搜索任何字符串中的模式或单词。MongoDB 还使用 $regex 运算符为字符串模式匹配提供了正则表达式的功能。MongoDB 使用 PCRE (Perl 兼容正则表达式)作为正则表达式语言。
与文本搜索不同,我们不需要进行任何配置或命令即可使用正则表达式。
假设我们已经在名为 posts 的数据库中插入了一个文档,如下所示
> db.posts.insert( { "post_text": "enjoy the mongodb articles on w"3codebox", "tags": [ "mongodb", "w3codebox" ] } WriteResult({ "nInserted": 1 })
下面的regex查询搜索包含字符串 w3codebox 的所有帖子–
> db.posts.find({post_text:{$regex:"w"3codebox"}}).pretty() { "_id": ObjectId("5dd7ce28f1dd4583e7103fe0"), "post_text": "enjoy the mongodb articles on w"3codebox", "tags": [ "mongodb", "w3codebox" ] } { "_id": ObjectId("5dd7d111f1dd4583e7103fe2") "post_text": "enjoy the mongodb articles on w"3codebox", "tags": [ "mongodb", "w3codebox" ] } >
相同的查询也可以写成-
">db.posts.find({post_text:/w3codebox/})
为了使搜索不区分大小写,我们使用$options
带有value的参数$i
。以下命令将查找带有单词的字符串w3codebox
,而不考虑大小写或小写字母-
">db.posts.find({post_text:{$regex:"w"3codebox", $options:"$i"})
该查询返回的结果之一是以下文档,其中包含w3codebox
在不同情况下的单词-
{ "_id": ObjectId("53493d37d852429c10000004") "post_text": " hey! this is my post on w"3codebox", "tags" : [ "w3codebox" ] }
Nous pouvons également utiliser le concept d'expression régulière sur les champs d'array. Lorsque nous mettons en œuvre la fonctionnalité des tags, cela est particulièrement important. Par conséquent, si vous souhaitez rechercher tous les mots portant des tags qui commencent par le mot tutorial (tutoriel ou tutorialpoint ou tutorialphp), vous pouvez utiliser le code suivant-
>db.posts.find({tags:{$regex:"tutorial"}})
Si le champ document estindexé
La requête utilisera les valeurs d'index pour correspondre à l'expression régulière. Comparé à l'analyse complète de l'expression régulière sur l'ensemble de la collection, cela rend la recherche très rapide.
Si l'expression régulière estexpression préfixe
Alors, toutes les correspondances devraient commencer par un certain caractère de chaîne. Par exemple, si l'expression régulière est^tut
Alors, la requête doit ne rechercher que les chaînes de caractères commençant partut
.