MongoDB 正則表達(dá)式
正則表達(dá)式是使用單個(gè)字符串來描述、匹配一系列符合某個(gè)句法規(guī)則的字符串。
許多程序設(shè)計(jì)語言都支持利用正則表達(dá)式進(jìn)行字符串操作。
MongoDB 使用?$regex?操作符來設(shè)置匹配字符串的正則表達(dá)式。
MongoDB使用PCRE (Perl Compatible Regular Expression) 作為正則表達(dá)式語言。
不同于全文檢索,我們使用正則表達(dá)式不需要做任何配置。
考慮以下?posts?集合的文檔結(jié)構(gòu),該文檔包含了文章內(nèi)容和標(biāo)簽:
{ "post_text": "enjoy the mongodb articles on runoob", "tags": [ "mongodb", "runoob" ] }
使用正則表達(dá)式
以下命令使用正則表達(dá)式查找包含 runoob 字符串的文章:
>db.posts.find({post_text:{$regex:"runoob"}})
以上查詢也可以寫為:
>db.posts.find({post_text:/runoob/})
不區(qū)分大小寫的正則表達(dá)式
如果檢索需要不區(qū)分大小寫,我們可以設(shè)置 $options 為 $i。
以下命令將查找不區(qū)分大小寫的字符串 runoob:
>db.posts.find({post_text:{$regex:"runoob",$options:"$i"}})
集合中會(huì)返回所有包含字符串 runoob 的數(shù)據(jù),且不區(qū)分大小寫:
{ "_id" : ObjectId("53493d37d852429c10000004"), "post_text" : "hey! this is my post on runoob", "tags" : [ "runoob" ] }
數(shù)組元素使用正則表達(dá)式
我們還可以在數(shù)組字段中使用正則表達(dá)式來查找內(nèi)容。 這在標(biāo)簽的實(shí)現(xiàn)上非常有用,如果你需要查找包含以 run 開頭的標(biāo)簽數(shù)據(jù)(ru 或 run 或 runoob), 你可以使用以下代碼:
>db.posts.find({tags:{$regex:"run"}})
優(yōu)化正則表達(dá)式查詢
如果你的文檔中字段設(shè)置了索引,那么使用索引相比于正則表達(dá)式匹配查找所有的數(shù)據(jù)查詢速度更快。
如果正則表達(dá)式是前綴表達(dá)式,所有匹配的數(shù)據(jù)將以指定的前綴字符串為開始。例如: 如果正則表達(dá)式為?^tut?,查詢語句將查找以 tut 為開頭的字符串。
這里面使用正則表達(dá)式有兩點(diǎn)需要注意:
正則表達(dá)式中使用變量。一定要使用eval將組合的字符串進(jìn)行轉(zhuǎn)換,不能直接將字符串拼接后傳入給表達(dá)式。否則沒有報(bào)錯(cuò)信息,只是結(jié)果為空!實(shí)例如下:
var name=eval("/" + 變量值key +"/i");
以下是模糊查詢包含title關(guān)鍵詞, 且不區(qū)分大小寫:
title:eval("/"+title+"/i") // 等同于 title:{$regex:title,$Option:"$i"}
MongoDB 正則表達(dá)式
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。