1. 程式人生 > >mongodb 正則

mongodb 正則

正則 小寫 字符 _id bsp his 操作符 tutorials tor

正則表達式常用來在所有語言中搜索字符串的任何模式或文字。MongoDB還提供了正則表達式功能的字符串模式使用正則表達式$regex操作符。MongoDB使用PCRE(Perl兼容正則表達式)為正則表達式語言。

不同於文本搜索,我們不需要做任何配置或命令就能直接使用正則表達式。

考慮下包含文字後其標簽的帖子集合,文檔結構如以下:

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

使用正則表達式表達

下面的正則表達式查詢搜索所有包含字符串 yiibai.com 的帖子:

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

同樣的查詢也可以寫為:

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

使用正則表達式不區分大小寫

為了使搜索不區分大小寫,我們使用$options 帶有值參數 $i。下面的命令會搜索字符串:yiibai.com,不論大小寫:

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

該查詢重新調整的結果是:其中在大小下包含詞語 yiibai 文檔,如以下:

{
   "_id" : ObjectId("53493d37d852429c10000004"),
   "post_text" : "hey! this is my post on Yiibai", 
   "tags" : [ "yiibai" ]
}

使用正則表達式的數組元素:

我們還可以使用數組字段正則表達式概念。 這時候我們實現標簽的功能顯得尤為重要。 所以,如果想要搜索帶有標簽以詞組tutorial開始所有的帖子(無論是tutorial或tutorials或tutorialjava或tutorialphp),都可以使用下面的代碼:

>db.posts.find({tags:{$regex:"tutorial"}})
>db.posts.find({tags:{$regex:"^tutorial"}})以tutorial開頭
>db.posts.find({tags:{$regex:"tutorial$"}})以tutorial結尾
 

優化正則表達式查詢:

  • 如果文檔字段已被索引,查詢將使用使用索引值的匹配正則表達式。 這使得搜索非常快,正則表達式相對於掃描整個集合。
  • 如果正則表達式是一個前綴表達式,所有的匹配是以某一串字符開始。例如,如果正則表達式 ^tut, 查詢有只搜索那些開始串 tut.

mongodb 正則