Navicat使用教程:在MongoDB中執(zhí)行正則表達(dá)式搜索
正則表達(dá)式(regex)提供了一種將字符串與模式進(jìn)行匹配的方法,以使您的搜索“模糊”而不是精確。MongoDB內(nèi)置有一個正則表達(dá)式引擎,因此即使您不確切知道要查找的確切Field值是多少,您也可以對其進(jìn)行挖掘。在今天的文章中,我們將使用Navicat for MongoDB學(xué)習(xí)如何在MongoDB中使用正則表達(dá)式。Navicat Premium 12.1也支持MongoDB哦~
Navicat Premium是一個可連接多種數(shù)據(jù)庫的管理工具,它可以讓你以單一程序同時連接到MySQL、Oracle及PostgreSQL數(shù)據(jù)庫,讓管理不同類型的數(shù)據(jù)庫更加的方便。
基本語法
MongoDB提供了正則表達(dá)式運(yùn)算符,用于在集合中搜索字符串。下面的示例顯示了如何使用Sakila示例數(shù)據(jù)庫完成此操作:
假設(shè)我們想查找名為“DAN”、“DANNY”甚至“DANIEL”的電影。這是執(zhí)行此操作的語句:
db.film_list.find({actors:{$ regex:“ DAN”}})
成功執(zhí)行命令后,將顯示以下輸出:
我們可以通過刪除“$ regex:”限定符并將搜索字符串括在正斜杠(/)而不是引號中來簡化語句,因為正斜杠表示正則表達(dá)式:
db.film_list.find({actors:/ DAN /})
使用多個搜索字符串進(jìn)行搜索
我們可以在搜索字符串中包含多個以匹配各種組合。假設(shè)我們想通過匹配“Carrie Moss”或“moss carrie-anne”來查找Carrie-Anne Moss的電影。這是執(zhí)行此操作的語句:
db.film_list.find( { actors: { $elemMatch: { actors: /Moss/i, actors: /carrie-anne/i } } } );
$ elemMatch將返回這些記錄,其中數(shù)組元素匹配兩個條件。相反,如果使用不帶$ elemMatch的純$和(這是標(biāo)準(zhǔn)列表的默認(rèn)設(shè)置),則返回的電影將帶有“Carrie-Anne Moss”,但也帶有“Sandra Moss”和“Carrie-Anne Fisher”的那些電影。那將更多地是我們要檢索的信息的超集。還要注意“i”標(biāo)志;它使正則表達(dá)式不區(qū)分大小寫。這對于用戶輸入的搜索很有用,因為我們不能依賴用戶使用大小寫混合。
選項參數(shù)
我們還可以通過options參數(shù)為正則表達(dá)式提供其他說明。
i:不區(qū)分大小寫以匹配大小寫。
m:對于包含錨點(diǎn)的模式(即,^表示開始,$表示結(jié)束),請在每行的開頭或結(jié)尾匹配具有多行值的字符串。如果沒有此選項,這些錨點(diǎn)將在字符串的開頭或結(jié)尾匹配。
x:擴(kuò)展功能可以忽略$ regex模式中的所有空白字符,除非轉(zhuǎn)義或包含在字符類中。與其他標(biāo)志不同,此標(biāo)志需要$ regex和$ options語法
s:允許點(diǎn)字符(.)匹配所有字符,包括換行符。
結(jié)論
$ regex運(yùn)算符提供了MongoDB中模式匹配的簡便方法。為了獲得最佳結(jié)果,請確保對要搜索的文檔字段建立索引。這樣,查詢將使用索引值來匹配正則表達(dá)式。與正則表達(dá)式掃描整個集合相比,這使搜索非常快。
想要購買Navicat Premium正版授權(quán),或了解更多產(chǎn)品信息請點(diǎn)擊“咨詢在線客服”