MongoDB正則運算式

正則運算式在所有的編程語言中經常使用,用於以搜索任何字串中的模式或單詞。 MongoDB還提供使用$regex運算符的字串模式匹配的正則運算式的功能。 MongoDB使用PCRE(Perl相容正則運算式)作為正則運算式語言。

與文本搜索不同,不需要使用任何配置或命令來使用正則運算式。

請考慮以下文檔結構,其中包含post文本及其標籤 -

{
   "post_text": "enjoy the mongodb articles on zaixian tutorials",
   "tags": [
      "mongodb",
      "zaixian"
   ]
}

使用正則運算式

以下regex查詢搜索包含”zaixian“字串的所有帖子 -

>db.posts.find({post_text:{$regex:"zaixian"}})

上面的查詢也可以寫成 -

>db.posts.find({post_text:/zaixian/})

使用不區分大小寫的正則運算式

要使搜索不區分大小寫,可指定$options參數的值為$i。 以下命令將尋找具有單詞zaixian的字串,不管其是小寫還是大寫字母 -

>db.posts.find({post_text:{$regex:"zaixian", $options:"$i"}})

此查詢返回的結果之一是以下文檔,其中包含大小寫字母的”zaixian“單詞 -

{
   "_id" : ObjectId("595b99e1f6a6243715b3c316"),
   "post_text" : "hey! this is my post on zaixian zaixian",
   "tags" : [ "zaixian" ]
},
{
   "_id" : ObjectId("595b99e1f6a6243715b3c317"),
   "post_text" : "hey! this is my post on zaixian zaixian",
   "tags" : [ "zaixian" ]
}

對數組元素使用正則運算式

我們也可以在數組字段上使用正則運算式。當實現標籤的功能時,這尤其重要。 所以,如果要從單詞:tutorial(tutorialtutorials , tutorialpointtutorialphptutorialpythontutorialphp)開始搜索所有具有標籤的帖子,可以使用以下代碼 -

> db.posts.find({tags:{$regex:"tutorial"}})

優化正則運算式查詢

  • 如果文檔字段創建了索引,則查詢將使用索引值來匹配正則運算式。 與正常運算式掃描整個集合相比,使用索引值使得搜索非常快。

  • 如果正則運算式是首碼運算式,則所有匹配都是以某個字串字元開始。 例如,如果正則運算式是^tut,則查詢必須僅搜索以tut開頭的那些字串。


上一篇: MongoDB文本搜索 下一篇: MongoDB GridFS