• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】

    本文实例讲述了PHP mongodb操作类定义与用法。分享给大家供大家参考,具体如下:

    在别人基础上修改的mongodb操作类,适合mongodb2.x和mongodb3.x

    ?php
    /*** 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"));
    * 更新记录 array('$set'=>$newdata) 只修改指定字段
    * $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("test_table", array("title"=>"asdqw"), array("start"=>2,"limit"=>2,"sort"=>array("id"=>1)))
    * 查找一条记录
    * $mongo->findOne("test_table", array("id"=>1));
    * 删除记录
    * $mongo->remove("ttt", array("title"=>"bbb"));
    * 仅删除一条记录
    * $mongo->remove("ttt", array("title"=>"bbb"), array("justOne"=>1));
    * 获取Mongo操作的错误信息
    * $mongo->getError();
    */
    class HMongodb {
      public $_idType=1;//主键类型 1 string 0 obj
      //Mongodb连接
      var $mongo;
      var $curr_db_name;
      var $curr_table_name;
      var $error;
      /**
      * 构造函数
      * 支持传入多个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
      */
      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 = trim($mongo_server);
          //$config_arr=explode('/',$mongo_server);
          //$this->curr_db_name = array_pop($config_arr);
          $last_index=strrpos($mongo_server_str,'/');
          $db_name=substr($mongo_server_str,$last_index+1,strlen($mongo_server_str));
          $this->curr_db_name = $db_name;//获取dbname
          //print_r($db_name);exit;
        }
        try {
          $this->mongo = new MongoClient($mongo_server, array('connect'=>$connect));
        }
        catch (MongoConnectionException $e)
        {
          $this->error = $e->getMessage();
          return false;
        }
      }
      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;         }     }
      /**
      * 连接mongodb server
      *
      * 参数:无
      *
      * 返回值:
      * 成功:true
      * 失败:false
      */
      function connect()
      {
        try {
          $this->mongo->connect();
          return true;
        }
        catch (MongoConnectionException $e)
        {
          $this->error = $e->getMessage();
          return false;
        }
      }
      /**
      * select db
      *
      * 参数:$dbname
      *
      * 返回值:无
      */
      function selectDb($dbname)
      {
        $this->curr_db_name = $dbname;
      }
      /**
      * 创建索引:如索引已存在,则返回。
      *
      * 参数:
      * $table_name:表名
      * $index:索引-array("id"=>1)-在id字段建立升序索引
      * $index_param:其它条件-是否唯一索引等
      *
      * 返回值:
      * 成功:true
      * 失败:false
      */
      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
      */
      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:表名
      *
      * 返回值:表的记录数
      */
      function count($table_name,$query_condition=array())
      {
        $dbname = $this->curr_db_name;
        return $this->mongo->$dbname->$table_name->find($query_condition)->count();
      }
      //$newdata存在有_id则更新 不存在则插入
      function save($table_name, $newdata) {
        $dbname = $this->curr_db_name;
        if($this->_idType  $newdata['_id']){
          $newdata['_id']=new MongoId($newdata['_id']);
        }
        return $this->mongo->$dbname->$table_name->save($newdata);
      }
      /**
      * 更新记录
      *
      * 参数:
      * $table_name:表名
      * $condition:更新条件
      * $newdata:新的数据记录
      * $options:更新选择-upsert/multiple
      *
      * 返回值:
      * 成功:true
      * 失败:false
      */
      function update($table_name, $condition, $newdata, $options=array())
      {  if($this->_idType  $condition['_id']){
          $condition['_id']=new MongoId($condition['_id']);
        }
        $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
      */
      function remove($table_name, $condition, $options=array())
      {
        if($this->_idType  $condition['_id']){
          $condition['_id']=new MongoId($condition['_id']);
        }
        $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
      */
      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())
          {
            $row= $cursor->getNext();
            //print_r($cursor->getNext());exit;
            if($this->_idType  is_object($row['_id'])){
              $row['_id']=$row['_id']->__toString();//转换字符串
            }
            $result[] =$row;
          }
        }
        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
      */
      function findOne($table_name, $condition, $fields=array())
      {
        if($this->_idType  $condition['_id']){
          $condition['_id']=new MongoId($condition['_id']);
        }
        $dbname = $this->curr_db_name;
        $row=$this->mongo->$dbname->$table_name->findOne($condition, $fields);
        if($this->_idType  is_object($row['_id'])){
          $row['_id']=$row['_id']->__toString();//转换字符串
        }
        return $row;
      }
      /**
      * 获取当前错误信息
      *
      * 参数:无
      *
      * 返回值:当前错误信息
      */
      function getError()
      {
        return $this->error;
      }
      //返回原生mongodb collection集合对象
      function getCollection($table_name){
        $dbname = $this->curr_db_name;
        return $this->mongo->$dbname->$table_name;
      }
      //分组统计
      function group($table_name,$keys,$initial,$reduce,$condition){
        $dbname = $this->curr_db_name;
        $g = $this->mongo->$dbname->$table_name->group($keys, $initial, $reduce,$condition);
        return $g;
      }
    }
    
    

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP+MongoDB数据库操作技巧大全》、《PHP基于pdo操作数据库技巧总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • php封装的mongodb操作类代码
    • PHP实现的MongoDB数据库操作类分享
    • php实现的mongodb操作类
    • PHP实现的mongoDB数据库操作类完整实例
    • php实现的mongodb操作类实例
    • php实现的mongoDB单例模式操作类
    • php mongodb操作类 带几个简单的例子
    • MongoDB操作类封装实例代码
    上一篇:PHP实现redis限制单ip、单用户的访问次数功能示例
    下一篇:针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】 PHP,mongodb,操作,类,定义,