在php7中MongoDB實(shí)現(xiàn)模糊查詢(xún)的方法詳解
前言
在實(shí)際開(kāi)發(fā)中, 有不少的場(chǎng)景需要使用到模糊查詢(xún), MongoDB shell 模糊查詢(xún)很簡(jiǎn)單:
db.collection.find({'_id': /^5101/})
上面這句就是查詢(xún)_id以'5101'開(kāi)始的內(nèi)容。
在老的MogoDB中模糊查詢(xún)挺簡(jiǎn)單的,這里簡(jiǎn)單記錄下模糊查詢(xún)的操作方式:
命令行下:
db.letv_logs.find({"ctime":/uname?/i});
php操作
$query=array("name"=>new MongoRegex("/.*”.$name.".*/i"));
$db->find($query);
下面主要就講下新PHP驅(qū)動(dòng)中怎么查詢(xún):
$query = new \MongoDB\Driver\Query('_id' => ['$regex' => '^5101']);
$this->getManager()->executeQuery($this->dbname . $this->collection, $query);
上面就是新驅(qū)動(dòng)中執(zhí)行模糊查詢(xún), 說(shuō)實(shí)話(huà), 挺吐槽這個(gè)新驅(qū)動(dòng), 相比老的驅(qū)動(dòng), 這個(gè)函數(shù)名也太長(zhǎng)了吧。。。都快超過(guò)swift的函數(shù)名了。而且老驅(qū)動(dòng)上的不少功能都在新驅(qū)動(dòng)上干掉了。雖然提供了一個(gè)mongodb php library的類(lèi)庫(kù)來(lái)操作, 但是這個(gè)庫(kù)里面有60多個(gè)文件,有時(shí)候比我項(xiàng)目文件還要多,這是鬧哪樣。這我建議自己去封裝一個(gè)Driver類(lèi)來(lái)使用。
上面吐槽吐的有點(diǎn)跑題了, 除了直接模糊查詢(xún), 在和$in或$nin使用的時(shí)候, 需要特別注意下:
$filter = ['_id' => ['$in' => ['$regex' => '^5101']]];
如果你像上面那么寫(xiě)filter的話(huà), 執(zhí)行的時(shí)候?qū)伋鲆粋€(gè)致命錯(cuò)誤:
PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: $in needs an array in filename
這里說(shuō)$in里面需要提供一個(gè)數(shù)組, 那么我們把上面的$filter改下, 給它弄個(gè)數(shù)組過(guò)去:
$filter = ['_id' => ['$in' => [['$regex' => '^5101']]];
但是不幸的是, 還是無(wú)法成功的得到想要的結(jié)果:
PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: cannot nest $ under $in in filename
這里說(shuō)$in中不能出現(xiàn)$, 那咋辦呢? 其實(shí)在$in或$nin中要使用模糊匹配, 需要使用\MongoDB\BSON\Regex類(lèi)的實(shí)例:
$filter = ['_id' => ['$in' => [new \MongoDB\BSON\Regex('^5101','i')]]];
這次終于得到我們想要的結(jié)果了。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Java操作MongoDB模糊查詢(xún)和分頁(yè)查詢(xún)
- Java操作mongodb的模糊查詢(xún)和精確查詢(xún)
- Node.js對(duì)MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)模糊查詢(xún)的方法
- Python操作mongodb數(shù)據(jù)庫(kù)進(jìn)行模糊查詢(xún)操作示例
- Java操作MongoDB插入數(shù)據(jù)進(jìn)行模糊查詢(xún)與in查詢(xún)功能
- Golang Mongodb模糊查詢(xún)的使用示例
- MongoDB模糊查詢(xún)操作案例詳解(類(lèi)關(guān)系型數(shù)據(jù)庫(kù)的 like 和 not like)
- MongoDB多條件模糊查詢(xún)示例代碼
相關(guān)文章
學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)模板方法模式
這篇文章主要介紹了php設(shè)計(jì)模式中的模板方法模式,使用php實(shí)現(xiàn)模板方法模式,感興趣的小伙伴們可以參考一下2015-12-12
PHP細(xì)數(shù)實(shí)現(xiàn)提高并發(fā)能力的方法
這篇文章主要介紹了PHP提高并發(fā)能力有哪些方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
PHP中使用php5-ffmpeg擷取視頻圖片實(shí)例
這篇文章主要介紹了PHP中使用php5-ffmpeg擷取視頻圖片實(shí)例,本文使用一個(gè)AVI格式視頻為例,講解了如何擷取視頻畫(huà)面為圖片,需要的朋友可以參考下2015-01-01
php解決注冊(cè)并發(fā)問(wèn)題并提高QPS
這篇文章主要為大家介紹了php解決注冊(cè)并發(fā)問(wèn)題并提高QPS實(shí)現(xiàn)方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
PHP實(shí)現(xiàn)可自定義樣式的分頁(yè)類(lèi)
這篇文章主要介紹了PHP實(shí)現(xiàn)可自定義樣式的分頁(yè)類(lèi),可以自定義分頁(yè)樣式,感興趣的小伙伴們可以參考一下2016-03-03
PHP 存儲(chǔ)文本換行實(shí)現(xiàn)方法
在文本存儲(chǔ)時(shí)使用\n如果發(fā)現(xiàn)沒(méi)有效果, 這時(shí)可以使用\r\n就可以了,希望對(duì)有需要的朋友有所幫助。2010-01-01
PHP+jQuery實(shí)現(xiàn)滾屏無(wú)刷新動(dòng)態(tài)加載數(shù)據(jù)功能詳解
這篇文章主要介紹了PHP+jQuery實(shí)現(xiàn)滾屏無(wú)刷新動(dòng)態(tài)加載數(shù)據(jù)功能,涉及php動(dòng)態(tài)讀取數(shù)據(jù)庫(kù)及加載數(shù)據(jù)實(shí)現(xiàn)滾屏無(wú)刷新效果的具體操作技巧,需要的朋友可以參考下2017-05-05
php連接Access數(shù)據(jù)庫(kù)錯(cuò)誤及解決方法
前二天把一個(gè)asp+access的網(wǎng)站改成php+access的,在連連數(shù)據(jù)庫(kù)時(shí)可真讓我狠狠的郁悶了一把,通過(guò)百度了大量的相關(guān)文章終于解決了2013-06-06
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的運(yùn)行環(huán)境
這篇文章主要介紹了在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的運(yùn)行環(huán)境,需要的朋友可以參考下2016-04-04

