📅  最后修改于: 2020-11-27 06:05:11             🧑  作者: Mango
正则表达式经常在所有语言中用于搜索任何字符串的模式或单词。 MongoDB还提供了使用$ regex运算符进行字符串模式匹配的正则表达式功能。 MongoDB使用PCRE(Perl兼容正则表达式)作为正则表达式语言。
与文本搜索不同,我们不需要进行任何配置或命令即可使用正则表达式。
假设我们已经在名为posts的数据库中插入了一个文档,如下所示-
> db.posts.insert(
{
"post_text": "enjoy the mongodb articles on tutorialspoint",
"tags": [
"mongodb",
"tutorialspoint"
]
}
WriteResult({ "nInserted" : 1 })
以下正则表达式查询搜索其中包含字符串tutorialspoints的所有帖子-
> db.posts.find({post_text:{$regex:"tutorialspoint"}}).pretty()
{
"_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
"post_text" : "enjoy the mongodb articles on tutorialspoint",
"tags" : [
"mongodb",
"tutorialspoint"
]
}
{
"_id" : ObjectId("5dd7d111f1dd4583e7103fe2"),
"post_text" : "enjoy the mongodb articles on tutorialspoint",
"tags" : [
"mongodb",
"tutorialspoint"
]
}
>
相同的查询也可以写成-
>db.posts.find({post_text:/tutorialspoint/})
为了使搜索不区分大小写,我们使用$ options参数,其值为$ i 。以下命令将查找具有单词tutorialspoint的字符串,而不考虑大小写或小写字母-
>db.posts.find({post_text:{$regex:"tutorialspoint",$options:"$i"}})
该查询返回的结果之一是以下文档,其中包含在不同情况下的单词tutorialspoint-
{
"_id" : ObjectId("53493d37d852429c10000004"),
"post_text" : "hey! this is my post on TutorialsPoint",
"tags" : [ "tutorialspoint" ]
}
我们也可以在数组字段上使用正则表达式的概念。当我们实现标签的功能时,这尤其重要。因此,如果您要搜索所有带有标签的单词,这些单词均以单词tutorial(教程或tutorialpoint或tutorialphp)开头,则可以使用以下代码-
>db.posts.find({tags:{$regex:"tutorial"}})
如果文档字段已建立索引,则查询将使用索引值来匹配正则表达式。与正则表达式扫描整个集合相比,这使搜索非常快。
如果正则表达式是前缀表达式,则所有匹配项均应以某个字符串字符开头。例如,如果regex表达式为^ tut ,则查询只需要搜索以tut开头的字符串。