Mongodb 正則表達式 -regex 操作符

概述

正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫爲 regex、regexp 或 RE),計算機科學的一個概念。正則表達式通常被用來檢索、替換那些符合某個模式 (規則) 的文本。

許多程序設計語言都支持利用正則表達式進行字符串操作。例如,在 Perl 中就內建了一個功能強大的正則表達式引擎。正則表達式這個概念最初是由 Unix 中的工具軟件(例如 sed 和 grep)普及開的。正則表達式通常縮寫成 “regex”,單數有 regexp、regex,複數有 regexps、regexes、regexen。MongoDB 使用 $regex 操作符來設置匹配字符串的正則表達式。MongoDB 使用 PCRE (Perl Compatible Regular Expression) 作爲正則表達式語言。

不同於全文檢索,我們使用正則表達式不需要做任何配置。

考慮以下 posts 集合的文檔結構,該文檔包含了文章內容和標籤:

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

使用正則表達式

以下命令使用正則表達式查找包含 runoob 字符串的文章:

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

以上查詢也可以寫爲:

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

不區分大小寫的正則表達式

如果檢索需要不區分大小寫,我們可以設置 爲 i。

以下命令將查找不區分大小寫的字符串 runoob:

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

集合中會返回所有包含字符串 runoob 的數據,且不區分大小寫:

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

數組元素使用正則表達式

我們還可以在數組字段中使用正則表達式來查找內容。這在標籤的實現上非常有用,如果你需要查找包含以 run 開頭的標籤數據 (ru 或 run 或 runoob), 你可以使用以下代碼:

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

優化正則表達式查詢

如果你的文檔中字段設置了索引,那麼使用索引相比於正則表達式匹配查找所有的數據查詢速度更快。

如果正則表達式是前綴表達式,所有匹配的數據將以指定的前綴字符串爲開始。例如:如果正則表達式爲 ^tut ,查詢語句將查找以 tut 爲開頭的字符串。

「這裏面使用正則表達式有兩點需要注意:」

正則表達式中使用變量。一定要使用 eval 將組合的字符串進行轉換,不能直接將字符串拼接後傳入給表達式。否則沒有報錯信息,只是結果爲空!實例如下:

var );

以下是模糊查詢包含 title 關鍵詞, 且不區分大小寫:

title:eval("/"+title+"/i")    // 等同於 title:{$regex:title,$Option:"$i"}
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/vdEAPNnO06eG9iX_u1CT1Q