Navicat 部落格

2019 年 4 月 1 日,由 Robert Gravelle 撰寫

正規運算式(regex)提供了一種將字串與模式比對的方法,以便搜尋變為「模糊」而非精確。MongoDB 內建了一個 regex 引擎,因此即使你只是大概知道要尋找的確切欄位值,你也可以找到文件。在今天的文章中,我們將學習如何使用 Navicat for MongoDB 在 MongoDB 運用正規運算式。

基本語法

MongoDB 提供了 regex 運算子,用於搜尋集合中的字串。以下例子顯示了如何在 Sakila 範例資料庫完成搜尋:

假設我們想要找到名稱為「DAN」、「DANNY」、「DANIEL」等演員的電影。這是要執行的語句:

db.film_list.find({actors: {$regex: "DAN" }})

成功執行命令後,將顯示以下輸出:

我們可以移除「$regex:」限定詞並將搜尋字串括在正斜線(/)而不是引號中來簡化語句,因為正斜線代表 regex:

db.film_list.find({ actors: /DAN/ })

使用多個搜尋字串進行搜尋

我們可以包含多個搜尋字串以比對各種組合。假設我們想透過比對「Carrie Moss」或「moss carrie-anne」找到 Carrie-Anne Moss 的電影。這是要執行的語句:

db.film_list.find(
   { actors: { $elemMatch: { actors: /Moss/i, actors: /carrie-anne/i } } }
);

$elemMatch 將傳回陣列元素符合兩個準則的記錄。相比之下,在沒有 $elemMatch 的情況下使用普通的 $and(這是準則清單的預設值)將傳回「Carrie-Anne Moss」,還有「Sandra Moss」和「Carrie-Anne Fisher」的電影。這將是我們想要擷取的資訊的超集。還有一項要注意的是「i」旗標。它使正規運算式不區分大小寫。這對使用者輸入的搜尋很有用,因為我們不能依賴使用者使用混合大小寫。

options 參數

我們還可以使用 options 參數為我們的正規運算式提供附加指令。

  • i:以不區分大小寫比對大寫和小寫。
  • m:對於包含錨定的模式(也就是 ^ 代表開頭,$ 代表結尾),將每行開頭或結尾比對具有多行值的字串。如果沒有此選項,這些錨定將比對字串的開頭或結尾。
  • x:延伸功能可忽略 $regex 模式中的所有空白字元,除非字元逸出或包含在字元類別中。與其他旗標不同,這個旗標需要有 $options 語法的 $regex。
  • s:允許句點(.)字元比對包括新行字元在內的所有字元。

總結

$regex 運算子在 MongoDB 中提供了一種簡單的模式比對方法。為獲得最佳結果,請確保將要搜尋的文件欄位編入索引。這樣,查詢將使用索引值來比對正規運算式。與掃描整個集合的正規運算式相比,這使搜尋速度變得更快。

如果你想了解有關 Navicat for MongoDB 的更多資訊,請瀏覽產品頁面產品頁面。如果你使用多種資料庫類型,可選擇支援 MongoDB 的Navicat Premium 12.1!

Navicat 文章
頻道記錄
分享
部落格封存檔