在所有语言中,经常使用正则表达式来搜索任何字符串中的模式或单词, MongoDB还提供了使用 $regex 运算符进行字符串模式匹配。
与文本搜索不同,无涯教程不需要进行任何配置或命令即可使用正则表达式。
考虑 posts 集合下的以下文档结构,其中包含帖子文本及其标签-
{ "post_text": "enjoy the mongodb articles on learnfk", "tags": [ "mongodb", "learnfk" ] }
使用正则表达式
以下正则表达式查询搜索其中所有包含字符串 learnfk 的帖子-
>db.posts.find({post_text:{$regex:"learnfk"}})
相同的查询也可以写成-
>db.posts.find({post_text:/learnfk/})
不区分大小写
为了使搜索不区分大小写,无涯教程使用值为 $i 的 $options 参数。以下命令将查找具有单词 learnfk 的字符串,而不考虑大小写或小写字母-
>db.posts.find({post_text:{$regex:"learnfk",$options:"$i"}})
该查询返回的输出之一是以下文档,其中包含单词 learnfk 在不同情况下-
{ "_id" : ObjectId("53493d37d852429c10000004"), "post_text" : "hey! this is my post on LearnFk", "tags" : [ "learnfk" ] }
数组正则表达式
无涯教程还可以在数组字段上使用正则表达式的概念。如果您要搜索所有带有单词单词回肠荡气(tutorial或tutorialphp)开头的标签的帖子,则可以使用以下代码-
>db.posts.find({tags:{$regex:"tutorial"}})
优化正则查询
如果文档字段已被索引,则查询将使用索引值来匹配正则表达式,与正则表达式扫描整个集合相比,这使搜索非常快。
如果正则表达式是前缀表达式,则所有匹配项均应以某个字符串字符开头,如果正则表达式为 ^ tut ,则查询只需搜索以 tut 开头的字符串。
参考链接
https://www.learnfk.com/mongodb/mongodb-regular-expression.html
标签:正则表达式,MongoDB,posts,无涯,正则,搜索,text,post,learnfk From: https://blog.51cto.com/u_14033984/8184863