正規表示式在所有的程式設計語言中經常使用,用於以搜尋任何字串中的模式或單詞。 MongoDB還提供使用$regex
運算子的字串模式匹配的正規表示式的功能。 MongoDB使用PCRE(Perl相容正規表示式)作為正規表示式語言。
與文字搜尋不同,不需要使用任何組態或命令來使用正規表示式。
請考慮以下文件結構,其中包含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/})
要使搜尋不區分大小寫,可指定$options
引數的值為$i
。 以下命令將尋找具有單詞yiibai
的字串,不管其是小寫還是大寫字母 -
>db.posts.find({post_text:{$regex:"yiibai", $options:"$i"}})
此查詢返回的結果之一是以下文件,其中包含大小寫字母的」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" ]
}
我們也可以在陣列欄位上使用正規表示式。當實現標籤的功能時,這尤其重要。 所以,如果要從單詞:tutorial
(tutorial
,tutorials
, tutorialpoint
或 tutorialphp
或 tutorialpython
或 tutorialphp
)開始搜尋所有具有標籤的貼文,可以使用以下程式碼 -
> db.posts.find({tags:{$regex:"tutorial"}})
如果文件欄位建立了索引,則查詢將使用索引值來匹配正規表示式。 與正常表示式掃描整個集合相比,使用索引值使得搜尋非常快。
如果正規表示式是字首表示式,則所有匹配都是以某個字串字元開始。 例如,如果正規表示式是^tut
,則查詢必須僅搜尋以tut
開頭的那些字串。