PHP實現的MongoDB資料庫操作類分享_php執行個體

來源:互聯網
上載者:User
class HMongodb {     private $mongo;  //Mongodb串連  private $curr_db_name;  private $curr_table_name;  private $error;     public function getInstance($mongo_server, $flag=array())  {    static $mongodb_arr;    if (empty($flag['tag']))    {      $flag['tag'] = 'default';     }    if (isset($flag['force']) && $flag['force'] == true)    {      $mongo = new HMongodb($mongo_server);      if (empty($mongodb_arr[$flag['tag']]))       {        $mongodb_arr[$flag['tag']] = $mongo;      }      return $mongo;    }    else if (isset($mongodb_arr[$flag['tag']]) && is_resource($mongodb_arr[$flag['tag']]))    {      return $mongodb_arr[$flag['tag']];    }    else    {      $mongo = new HMongodb($mongo_server);      $mongodb_arr[$flag['tag']] = $mongo;      return $mongo;    }  }  /**   * 建構函式   * 支援傳入多個mongo_server(1.一個出問題時串連其它的server 2.自動將查詢均勻分發到不同server)   *   * 參數:   * $mongo_server:數組或字串-array("127.0.0.1:1111", "127.0.0.1:2222")-"127.0.0.1:1111"   * $connect:初始化mongo對象時是否串連,預設串連   * $auto_balance:是否自動做負載平衡,預設是   *   * 傳回值:   * 成功:mongo object   * 失敗:false   */  private function __construct($mongo_server, $connect=true, $auto_balance=true)  {   if (is_array($mongo_server))   {   $mongo_server_num = count($mongo_server);   if ($mongo_server_num > 1 && $auto_balance)   {    $prior_server_num = rand(1, $mongo_server_num);    $rand_keys = array_rand($mongo_server,$mongo_server_num);    $mongo_server_str = $mongo_server[$prior_server_num-1];    foreach ($rand_keys as $key)    {    if ($key != $prior_server_num - 1)    {     $mongo_server_str .= ',' . $mongo_server[$key];    }    }   }   else   {    $mongo_server_str = implode(',', $mongo_server);   }         }   else   {    $mongo_server_str = $mongo_server;   }   try {    $this->mongo = new Mongo($mongo_server, array('connect'=>$connect));   }   catch (MongoConnectionException $e)   {    $this->error = $e->getMessage();    return false;   }  }  /**  * 串連mongodb server  *  * 參數:無  *  * 傳回值:  * 成功:true  * 失敗:false  */  public function connect()  {    try {      $this->mongo->connect();      return true;    }    catch (MongoConnectionException $e)    {      $this->error = $e->getMessage();      return false;    }  }     /**  * select db  *  * 參數:$dbname  *  * 傳回值:無  */  public function selectDb($dbname)  {    $this->curr_db_name = $dbname;  }     /**  * 建立索引:如索引已存在,則返回。  *  * 參數:  * $table_name:表名  * $index:索引-array("id"=>1)-在id欄位建立升序索引  * $index_param:其它條件-是否唯一索引等  *  * 傳回值:  * 成功:true  * 失敗:false  */  public function ensureIndex($table_name, $index, $index_param=array())  {    $dbname = $this->curr_db_name;    $index_param['safe'] = 1;    try {      $this->mongo->$dbname->$table_name->ensureIndex($index, $index_param);      return true;    }    catch (MongoCursorException $e)    {      $this->error = $e->getMessage();      return false;    }  }  /**  * 插入記錄  *  * 參數:  * $table_name:表名  * $record:記錄  *  * 傳回值:  * 成功:true  * 失敗:false  */  public function insert($table_name, $record)  {    $dbname = $this->curr_db_name;    try {      $this->mongo->$dbname->$table_name->insert($record, array('safe'=>true));      return true;    }    catch (MongoCursorException $e)    {      $this->error = $e->getMessage();      return false;    }  }     /**  * 查詢表的記錄數  *  * 參數:  * $table_name:表名  *  * 傳回值:表的記錄數  */  public function count($table_name)  {    $dbname = $this->curr_db_name;    return $this->mongo->$dbname->$table_name->count();  }     /**  * 更新記錄  *  * 參數:  * $table_name:表名  * $condition:更新條件  * $newdata:新的資料記錄  * $options:更新選擇-upsert/multiple  *  * 傳回值:  * 成功:true  * 失敗:false  */  public function update($table_name, $condition, $newdata, $options=array())  {    $dbname = $this->curr_db_name;    $options['safe'] = 1;    if (!isset($options['multiple']))    {      $options['multiple'] = 0;     }    try {      $this->mongo->$dbname->$table_name->update($condition, $newdata, $options);      return true;    }    catch (MongoCursorException $e)    {      $this->error = $e->getMessage();      return false;    }  }     /**  * 刪除記錄  *  * 參數:  * $table_name:表名  * $condition:刪除條件  * $options:刪除選擇-justOne  *  * 傳回值:  * 成功:true  * 失敗:false  */  public function remove($table_name, $condition, $options=array())  {    $dbname = $this->curr_db_name;    $options['safe'] = 1;    try {      $this->mongo->$dbname->$table_name->remove($condition, $options);      return true;    }    catch (MongoCursorException $e)    {      $this->error = $e->getMessage();      return false;  }  }     /**  * 尋找記錄  *  * 參數:  * $table_name:表名  * $query_condition:欄位尋找條件  * $result_condition:查詢結果限制條件-limit/sort等  * $fields:擷取欄位  *  * 傳回值:  * 成功:記錄集  * 失敗:false  */  public function find($table_name, $query_condition, $result_condition=array(), $fields=array())  {    $dbname = $this->curr_db_name;    $cursor = $this->mongo->$dbname->$table_name->find($query_condition, $fields);    if (!empty($result_condition['start']))    {      $cursor->skip($result_condition['start']);    }    if (!empty($result_condition['limit']))    {      $cursor->limit($result_condition['limit']);    }    if (!empty($result_condition['sort']))    {      $cursor->sort($result_condition['sort']);    }    $result = array();    try {      while ($cursor->hasNext())      {        $result[] = $cursor->getNext();      }    }    catch (MongoConnectionException $e)    {      $this->error = $e->getMessage();      return false;    }    catch (MongoCursorTimeoutException $e)    {      $this->error = $e->getMessage();      return false;    }    return $result;  }     /**  * 尋找一條記錄  *  * 參數:  * $table_name:表名  * $condition:尋找條件  * $fields:擷取欄位  *  * 傳回值:  * 成功:一條記錄  * 失敗:false  */  public function findOne($table_name, $condition, $fields=array())  {    $dbname = $this->curr_db_name;    return $this->mongo->$dbname->$table_name->findOne($condition, $fields);  }     /**  * 擷取當前錯誤資訊  *  * 參數:無  *  * 傳回值:當前錯誤資訊  */  public function getError()  {    return $this->error;  }  /*** Mongodb類** examples:   * $mongo = new HMongodb("127.0.0.1:11223");  * $mongo->selectDb("test_db");  * 建立索引  * $mongo->ensureIndex("test_table", array("id"=>1), array('unique'=>true));  * 擷取表的記錄  * $mongo->count("test_table");  * 插入記錄  * $mongo->insert("test_table", array("id"=>2, "title"=>"asdqw"));  * 更新記錄  * $mongo->update("test_table", array("id"=>1),array("id"=>1,"title"=>"bbb"));  * 更新記錄-存在時更新,不存在時添加-相當於set  * $mongo->update("test_table", array("id"=>1),array("id"=>1,"title"=>"bbb"),array("upsert"=>1));  * 尋找記錄  * $mongo->find("c", array("title"=>"asdqw"), array("start"=>2,"limit"=>2,"sort"=>array("id"=>1)))  * 尋找一條記錄  * $mongo->findOne("$mongo->findOne("ttt", array("id"=>1))", array("id"=>1));  * 刪除記錄  * $mongo->remove("ttt", array("title"=>"bbb"));  * 僅刪除一條記錄  * $mongo->remove("ttt", array("title"=>"bbb"), array("justOne"=>1));  * 擷取Mongo操作的錯誤資訊  * $mongo->getError();  */}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.