1. 程式人生 > >使用MongoDB類操作MongoDB資料庫總結

使用MongoDB類操作MongoDB資料庫總結

搜了很多資料,操作MongoDB都是使用Mongo類的,偏偏我使用的Ubuntu 16.4版本不能裝這個擴充套件庫,只能裝MongoDB類,於是我被逼上了梁山。只好嘗試自己完全沒有使用過的MongoDB類。剛接觸的時候,那個不習慣啊,類超級多,只好耐著性子一個一個看,檢視他們之間的關係:MongoDB中各類簡單介紹,然後又去把該類的入口檔案:Manager類的官網資料翻譯了出來,才漸漸基礎能用,這裡先介紹一下他們的基礎關係,至於他們具體的傳入引數和返回值型別,那隻能去看官網了:

類名稱 類介紹
Driver\Manager 入口檔案,一般都要先例項化該類
Driver\BulkWrite 讀寫類,資料庫的增、刪、改都要先靠該類來實現
Driver\Query 查詢類,MongoDB支援豐富的查詢方式,所以單獨拿出來組建了一個類
Driver\Cursor 返回結果類,其實就是一個Cursor類的一個物件,該類有內建的toArray()函式可以結果轉換成陣列形式的
BSON\ObjectID MongoDB預設建立的索引是_id,在新增的時候可以指定_id,給類就是可以建立一個指定內容的_id

我使用上述類簡單操作MongoDB的時執行的順序是:

  1. 例項化Manager類
  2. 要進行增刪改操作時,例項化BulkWrite類,並根據需要的操作執行該類中的insert、delete、update方法,要進行查詢時,例項化Query類
  3. 接著根據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();
    }
}

上面只是把多個操作類之間的組合關係進行了整合,如果你不會MongoDB類的命令列操作的話,那麼你還是玩不6的,所以推薦你看一下我以前的摘記:MongoDB基礎命令列操作簡記