在php7中MongoDB實(shí)現(xiàn)模糊查詢的方法詳解
前言
在實(shí)際開發(fā)中, 有不少的場(chǎng)景需要使用到模糊查詢, MongoDB shell 模糊查詢很簡(jiǎn)單:
db.collection.find({'_id': /^5101/})
上面這句就是查詢_id以'5101'開始的內(nèi)容。
在老的MogoDB中模糊查詢挺簡(jiǎn)單的,這里簡(jiǎn)單記錄下模糊查詢的操作方式:
命令行下:
db.letv_logs.find({"ctime":/uname?/i});
php操作
$query=array("name"=>new MongoRegex("/.*”.$name.".*/i")); $db->find($query);
下面主要就講下新PHP驅(qū)動(dòng)中怎么查詢:
$query = new \MongoDB\Driver\Query('_id' => ['$regex' => '^5101']); $this->getManager()->executeQuery($this->dbname . $this->collection, $query);
上面就是新驅(qū)動(dòng)中執(zhí)行模糊查詢, 說實(shí)話, 挺吐槽這個(gè)新驅(qū)動(dòng), 相比老的驅(qū)動(dòng), 這個(gè)函數(shù)名也太長(zhǎng)了吧。。。都快超過swift的函數(shù)名了。而且老驅(qū)動(dòng)上的不少功能都在新驅(qū)動(dòng)上干掉了。雖然提供了一個(gè)mongodb php library
的類庫(kù)來操作, 但是這個(gè)庫(kù)里面有60多個(gè)文件,有時(shí)候比我項(xiàng)目文件還要多,這是鬧哪樣。這我建議自己去封裝一個(gè)Driver類來使用。
上面吐槽吐的有點(diǎn)跑題了, 除了直接模糊查詢, 在和$in
或$nin
使用的時(shí)候, 需要特別注意下:
$filter = ['_id' => ['$in' => ['$regex' => '^5101']]];
如果你像上面那么寫filter的話, 執(zhí)行的時(shí)候?qū)伋鲆粋€(gè)致命錯(cuò)誤:
PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: $in needs an array in filename
這里說$in
里面需要提供一個(gè)數(shù)組, 那么我們把上面的$filter
改下, 給它弄個(gè)數(shù)組過去:
$filter = ['_id' => ['$in' => [['$regex' => '^5101']]];
但是不幸的是, 還是無(wú)法成功的得到想要的結(jié)果:
PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: cannot nest $ under $in in filename
這里說$in
中不能出現(xiàn)$, 那咋辦呢? 其實(shí)在$in
或$nin
中要使用模糊匹配, 需要使用\MongoDB\BSON\Regex
類的實(shí)例:
$filter = ['_id' => ['$in' => [new \MongoDB\BSON\Regex('^5101','i')]]];
這次終于得到我們想要的結(jié)果了。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
php array_map()函數(shù)實(shí)例用法
在本篇文章里小編給大家分享了一篇關(guān)于php array_map()函數(shù)實(shí)例用法,有興趣的朋友們可以學(xué)習(xí)下。2021-03-03PHP中實(shí)現(xiàn)漢字轉(zhuǎn)區(qū)位碼應(yīng)用源碼實(shí)例解析
PHP里如何實(shí)現(xiàn)漢字轉(zhuǎn)區(qū)位碼這個(gè)問題一直困擾這大多程序員,那么下面這個(gè)源碼實(shí)例相信能給大家?guī)砗艽蟮膸椭?/div> 2010-06-06asp.net和php的區(qū)別點(diǎn)總結(jié)
在本篇文章里小編給大家分享了關(guān)于asp.net和php的區(qū)別的相關(guān)知識(shí)點(diǎn),需要的朋友們可以分享下。2019-10-10php解決crontab定時(shí)任務(wù)不能寫入文件問題的方法分析
這篇文章主要介紹了php解決crontab定時(shí)任務(wù)不能寫入文件問題的方法,結(jié)合實(shí)例形式分析了crontab定時(shí)任務(wù)無(wú)法正常執(zhí)行的原因與解決方法,需要的朋友可以參考下2019-09-09PHP+JavaScript實(shí)現(xiàn)無(wú)刷新上傳圖片
本文主要介紹了PHP+JavaScript實(shí)現(xiàn)無(wú)刷新上傳圖片的方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02PHP實(shí)現(xiàn)限制域名訪問的實(shí)現(xiàn)代碼(本地驗(yàn)證)
這篇文章主要介紹了PHP實(shí)現(xiàn)限制域名訪問的實(shí)現(xiàn)代碼,如果不是允許的域名不讓使用,然后讓客戶購(gòu)買認(rèn)證即可,但本地驗(yàn)證加密一般都可以被破解,建議用遠(yuǎn)程驗(yàn)證,都收費(fèi)了不差這點(diǎn)錢了,需要的朋友可以參考下2020-09-09最新評(píng)論