正則表達式在所有的編程語言中經(jīng)常使用,用于以搜索任何字符串中的模式或單詞。 MongoDB還提供使用$regex運算符的字符串模式匹配的正則表達式的功能。 MongoDB使用PCRE(Perl兼容正則表達式)作為正則表達式語言。
與文本搜索不同,不需要使用任何配置或命令來使用正則表達式。
請考慮以下文檔結(jié)構(gòu),其中包含post文本及其標簽 -
{
"post_text": "enjoy the mongodb articles on yiibai tutorials",
"tags": [
"mongodb",
"yiibai"
]
}
以下regex查詢搜索包含”yiibai“字符串的所有帖子 -
>db.posts.find({post_text:{$regex:"yiibai"}})
上面的查詢也可以寫成 -
>db.posts.find({post_text:/yiibai/})
要使搜索不區(qū)分大小寫,可指定$options參數(shù)的值為$i。 以下命令將尋找具有單詞yiibai的字符串,不管其是小寫還是大寫字母 -
>db.posts.find({post_text:{$regex:"yiibai", $options:"$i"}})
此查詢返回的結(jié)果之一是以下文檔,其中包含大小寫字母的”yiibai“單詞 -
{
"_id" : ObjectId("595b99e1f6a6243715b3c316"),
"post_text" : "hey! this is my post on Yiibai Yiibai",
"tags" : [ "yiibai" ]
},
{
"_id" : ObjectId("595b99e1f6a6243715b3c317"),
"post_text" : "hey! this is my post on yiiBai Yiibai",
"tags" : [ "yiibai" ]
}
我們也可以在數(shù)組字段上使用正則表達式。當實現(xiàn)標簽的功能時,這尤其重要。 所以,如果要從單詞:tutorial(tutorial,tutorials , tutorialpoint 或 tutorialphp 或 tutorialpython 或 tutorialphp)開始搜索所有具有標簽的帖子,可以使用以下代碼 -
> db.posts.find({tags:{$regex:"tutorial"}})
如果文檔字段創(chuàng)建了索引,則查詢將使用索引值來匹配正則表達式。 與正常表達式掃描整個集合相比,使用索引值使得搜索非???。
如果正則表達式是前綴表達式,則所有匹配都是以某個字符串字符開始。 例如,如果正則表達式是^tut,則查詢必須僅搜索以tut開頭的那些字符串。