MongoDB - 正则表达式

正则表达式经常用于所有语言中,以搜索任何字符串中的模式或单词. 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 开头的字符串.