首頁  >  文章  >  後端開發  >  詳解php7如何實作MongoDB模糊查詢

詳解php7如何實作MongoDB模糊查詢

*文
*文原創
2018-01-03 11:26:402813瀏覽

php7如何實作MongoDB模糊查詢? MongoDB模糊查詢語句相信對大家來說都不陌生,本文主要為大家介紹了在php 7中MongoDB實作模糊查詢的方法,文中給了詳細的介紹和範例程式碼,對大家有一定的參考學習價值。希望對大家有幫助。

前言

在實際開發中, 有不少的場景需要使用到模糊查詢, MongoDB shell 模糊查詢很簡單:

db.collection.find({'_id': /^5101/})

上面這句話就是查詢_id以'5101'開始的內容。

在舊的MogoDB中模糊查詢挺簡單的,這裡簡單記錄下模糊查詢的操作方式:

命令列下:

db.letv_logs.find({"ctime":/uname?/i});

php操作

$query=array("name"=>new MongoRegex("/.*”.$name.".*/i"));
$db->find($query);

#下面主要就講下新PHP驅動程式中怎麼查詢:

$query = new \MongoDB\Driver\Query('_id' => ['$regex' => '^5101']);
$this->getManager()->executeQuery($this->dbname . $this->collection, $query);

上面就是新驅動中執行模糊查詢, 說實話, 挺吐槽這個新驅動, 相比老的驅動, 這個函數名也太長了吧。 。 。都快超過swift的函數名了。而且老驅動上的不少功能都在新驅動上乾掉了。雖然提供了一個mongodb php library的類別庫來操作, 但是這個庫裡面有60多個文件,有時候比我專案文件還要多,這是鬧哪樣。這我建議自己去封裝一個Driver類別來使用。

上面吐槽吐的有點跑題了, 除了直接模糊查詢, 在和$in$nin使用的時候, 需要特別注意下:

$filter = ['_id' => ['$in' => ['$regex' => '^5101']]];

如果你像上面那麼寫filter的話, 執行的時候將拋出一個致命錯誤:

PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: $in needs an array in filename

這裡說$in裡面需要提供一個數組, 那麼我們把上面的$filter改下, 給它弄個數組過去:

$filter = ['_id' => ['$in' => [['$regex' => '^5101']]];

但是不幸的是, 還是無法成功的得到想要的結果:

PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: cannot nest $ under $in in filename

這裡說$in中不能出現$, 那咋辦呢? 其實在$in$nin中要使用模糊符合, 需要使用\MongoDB\BSON\Regex類別的實例:

$filter = ['_id' => ['$in' => [new \MongoDB\BSON\Regex('^5101','i')]]];

這次終於得到我們想要的結果了。

相關推薦:

php實作Mongodb自訂產生自增ID

MongoDB檢視執行計畫

如何使用MongoDB索引

以上是詳解php7如何實作MongoDB模糊查詢的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn