翻譯|使用教程|編輯:莫成敏|2019-11-15 15:50:15.693|閱讀 1347 次
概述:正則表達(dá)式(regex)提供了一種將字符串與模式進(jìn)行匹配的方法,以使您的搜索“模糊”而不是精確。在今天的文章中,我們將學(xué)習(xí)如何在MongoDB中使用正則表達(dá)式。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
正則表達(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:”限定符并將搜索字符串括在正斜杠(/)而不是引號中來簡化語句,因?yàn)檎备鼙硎菊齽t表達(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ū)分大小寫。這對于用戶輸入的搜索很有用,因?yàn)槲覀儾荒芤蕾囉脩羰褂么笮懟旌稀?/p>
選項(xiàng)參數(shù)
我們還可以通過options參數(shù)為正則表達(dá)式提供其他說明。
i:不區(qū)分大小寫以匹配大小寫。
m:對于包含錨點(diǎn)的模式(即,^表示開始,$表示結(jié)束),請在每行的開頭或結(jié)尾匹配具有多行值的字符串。如果沒有此選項(xiàng),這些錨點(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)擊
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: