正则表达式经常用于所有语言中,以搜索任何字符串中的模式或单词. MongoDB还使用 $regex 运算符为字符串模式匹配提供正则表达式的功能. MongoDB使用PCRE(Perl兼容正则表达式)作为正则表达式语言.
与文本搜索不同,我们不需要执行任何配置或命令来使用正则表达式.
考虑 posts 集合下的以下文档结构,其中包含帖子文本及其标签 :
{ "post_text": "enjoy the mongodb articles on it1352", "tags": [ "mongodb", "it1352" ]}
使用正则表达式
以下正则表达式查询搜索包含字符串的所有帖子it1352 in :
>db.posts.find({post_text:{$regex:"it1352"}})
同样的查询也可以写成 :
>db.posts.find({post_text:/it1352/})
Using regex Expression with Case Insensitive
为了使搜索不区分大小写,我们使用$options参数,其值为$i。 下面的命令将查找带有单词it1352的字符串,而不考虑大小写
>db.posts.find({post_text:{$regex:"it1352",$options:"$i"}})
此查询返回的结果之一是以下文档,该文档在不同情况下包含单词it1352
{ "_id" : ObjectId("53493d37d852429c10000004"), "post_text" : "hey! this is my post on TutorialsPoint", "tags" : [ "it1352" ]}
使用数组元素的正则表达式
我们还可以在数组字段上使用正则表达式的概念.当我们实现标签的功能时,这尤其重要.因此,如果您要搜索从单词tutorial或tutorialit1352或tutorialphp)开始的所有标签帖子,您可以使用以下代码 :
>db.posts.find({tags:{$regex:"tutorial"}})
优化正则表达式查询
如果文档字段已编入索引,查询将使用索引值的使用匹配正则表达式.与扫描整个集合的正则表达式相比,这使搜索速度非常快.
如果正则表达式是前缀表达式 ,所有匹配都是以某些字符串字符开头.例如,如果正则表达式是 ^tut ,则查询必须仅搜索以 tut 开头的字符串.