《PHP實戰:在php7中MongoDB實現模糊查詢的方法詳解》要點:
本文介紹了PHP實戰:在php7中MongoDB實現模糊查詢的方法詳解,希望對您有用。如果有疑問,可以聯系我們。
相關主題:非關系型數據庫
前言PHP編程
在實際開發中, 有不少的場景需要使用到模糊查詢, MongoDB shell 模糊查詢很簡單:PHP編程
db.collection.find({'_id': /^5101/})
上面這句就是查詢_id以'5101'開始的內容.PHP編程
在老的MogoDB中模糊查詢挺簡單的,這里簡單記錄下模糊查詢的操作方式:
PHP編程
命令行下:PHP編程
db.letv_logs.find({"ctime":/uname?/i});
php操作PHP編程
$query=array("name"=>new MongoRegex("/.*”.$name.".*/i")); $db->find($query);
下面主要就講下新PHP驅動中怎么查詢:PHP編程
$query = new \MongoDB\Driver\Query('_id' => ['$regex' => '^5101']); $this->getManager()->executeQuery($this->dbname . $this->collection, $query);
上面就是新驅動中執行模糊查詢, 說實話, 挺吐槽這個新驅動, 相比老的驅動, 這個函數名也太長了吧...都快超過swift的函數名了.而且老驅動上的不少功能都在新驅動上干掉了.雖然提供了一個mongodb php library
的類庫來操作, 但是這個庫里面有60多個文件,有時候比我項目文件還要多,這是鬧哪樣.這我建議自己去封裝一個Driver類來使用.PHP編程
上面吐槽吐的有點跑題了, 除了直接模糊查詢, 在和$in
或$nin
使用的時候, 需要特別注意下:PHP編程
$filter = ['_id' => ['$in' => ['$regex' => '^5101']]];
如果你像上面那么寫filter的話, 執行的時候將拋出一個致命錯誤:PHP編程
PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: $in needs an array in filename
這里說$in
里面需要提供一個數組, 那么我們把上面的$filter
改下, 給它弄個數組過去:PHP編程
$filter = ['_id' => ['$in' => [['$regex' => '^5101']]];
但是不幸的是, 還是無法成功的得到想要的結果:PHP編程
PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: cannot nest $ under $in in filename
這里說$in
中不能出現$, 那咋辦呢? 其實在$in
或$nin
中要使用模糊匹配, 需要使用\MongoDB\BSON\Regex
類的實例:PHP編程
$filter = ['_id' => ['$in' => [new \MongoDB\BSON\Regex('^5101','i')]]];
這次終于得到我們想要的結果了.PHP編程
總結PHP編程
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對維易PHP的支持.PHP編程
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/876.html