參考:https://www.php.net/manual/zh/class.mongodb-driver-manager.php
參考:https://www.zhaokeli.com/article/8574.html
Driver\Manager 入口文件,一般都要先實例化該類
Driver\BulkWrite 讀寫類,數據庫的增、刪、改都要先靠該類來實現
Driver\Query 查詢類,MongoDB支持豐富的查詢方式,所以單獨拿出來組建了一個類
Driver\Cursor 返回結果類,其實就是一個Cursor類的一個對象,該類有內置的toArray()函數可以結果轉換成數組形式的
BSON\ObjectID MongoDB默認創建的索引是_id,在添加的時候可以指定_id,給類就是可以創建一個指定內容的_id
我使用上述類簡單操作MongoDB的時運行的順序是:
實例化Manager類
要進行增刪改操作時,實例化BulkWrite類,並根據需要的操作執行該類中的insert、delete、update方法,要進行查詢時,實例化Query類
接着根據2中的操作,選擇運行Manager類的executeQuery或者executeBulkWrite兩個操作中的一個,返回結果類型是Cursor類,運行Cursor類的toArray方法,就能將結果從對象轉換成數組,雖然其中還是會包含對象,但是比起單純處理對象無疑是方便多了的。
這里貼一個基礎操作類,把上面的過程進行了整合:
class MongoDBOperate { private $config = array( 'host' => '127.0.0.1', 'port' => '27017', 'user' => '', 'passwords' => '', 'db' => 'test' ); // MongoDB\Driver入口類 private $Manage; function __construct() { try { $this->Manage = new MongoDB\Driver\Manager("mongodb://" . $this->config['host'] . "/" . $this->config['port']); } catch (Exception $exception) { echo $exception->getMessage(); } } /** * @param $collection * @param $data * @return array * 新增數據 */ public function insert($collection, $data) { // 返回結果_id $_ids = array(); $BulkWrite = new MongoDB\Driver\BulkWrite(); if (is_array(current($data))) { foreach ($data as $key => $datum) { $_id = new MongoDB\BSON\ObjectID(); $datum['_id'] = $_id; $BulkWrite->insert($datum); $_ids[] = $_id->oid; } } else { $_id = new MongoDB\BSON\ObjectID(); $data['_id'] = $_id; $BulkWrite->insert($data); $_ids = $_id->oid; } $this->Manage->executeBulkWrite($this->config['db'] . "." . $collection, $BulkWrite); return $_ids; } /** * @param $collection * @param $filter * 刪除數據 */ public function delete($collection,$filter){ $BulkWrite=new MongoDB\Driver\BulkWrite(); if(is_array(current($filter))){ foreach ($filter as $key=>$value){ $BulkWrite->delete($value); } }else{ $BulkWrite->delete($filter); } $this->Manage->executeBulkWrite($this->config['db'].".".$collection,$BulkWrite); } /** * @param $collection * @param $filter * @param $data * 更新數據 */ public function update($collection,$filter,$data){ $BulkWrite=new MongoDB\Driver\BulkWrite(); if(is_array(current($filter))){ foreach ($filter as $key=>$value){ $BulkWrite->update($value,$data[$key]); } }else{ // var_dump($filter); // var_dump($data); $BulkWrite->update($filter,$data); } $this->Manage->executeBulkWrite($this->config['db'].".".$collection,$BulkWrite); } /** * @param $collection * @param $filter * @return array * 查看數據 */ public function select($collection,$filter){ $Query=new MongoDB\Driver\Query($filter); $cursor=$this->Manage->executeQuery($this->config['db'].".".$collection,$Query); return $cursor->toArray(); } }