php mongodb操作类 带几个简单的例子


Posted in PHP onAugust 25, 2016

之前三水点靠木已经发过几篇类似的文章,大家可以参考一下。

核心代码:

class NewMongodb {  
  private $mongo;  //NewMongodb连接
  private $curr_db_name;
  private $curr_table_name;
  private $error;
  public $config;
  public function getInstance($mongo_server, $flag=array())
  {
    static $NewMongodb_arr;
    if (empty($flag['tag']))
    {
      $flag['tag'] = 'default';     }
    if (isset($flag['force']) && $flag['force'] == true)
    {
      $mongo = new NewMongodb($mongo_server);
      if (empty($NewMongodb_arr[$flag['tag']]))
      {
        $NewMongodb_arr[$flag['tag']] = $mongo;
      }
      return $mongo;
    }
    else if (isset($NewMongodb_arr[$flag['tag']]) && is_resource($NewMongodb_arr[$flag['tag']]))
    {
      return $NewMongodb_arr[$flag['tag']];
    }
    else
    {
      $mongo = new NewMongodb($mongo_server);
      $NewMongodb_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
   */
  public 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 MongoClient($mongo_server, array('connect'=>$connect));
   }
   catch (MongoConnectionException $e)
   {
    $this->error = $e->getMessage();
    return false;
   }
  }
  
  /**
  * 连接NewMongodb 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;
  }
  /*** NewMongodb类** examples:
   * $mongo = new NewMongodb("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();
  */
}
PHP 相关文章推荐
PHP生成静态页面详解
Dec 05 PHP
解析PHP 使用curl提交json格式数据
Jun 29 PHP
PHP SPL标准库中的常用函数介绍
May 11 PHP
PHP递归创建多级目录
Nov 05 PHP
详解WordPress中分类函数wp_list_categories的使用
Jan 04 PHP
php生成txt文件实例代码介绍
Apr 28 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
PHP标准类(stdclass)用法示例
Sep 28 PHP
php文件上传类的分享
Jul 06 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
Laravel 连接(Join)示例
Oct 16 PHP
Thinkphp5框架异常处理操作实例分析
Jun 03 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 #PHP
php 的反射详解及示例代码
Aug 25 #PHP
php 输入输出流详解及示例代码
Aug 25 #PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 #PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 #PHP
PHP sleep()函数, usleep()函数
Aug 25 #PHP
PHP页面间传递值和保持值的方法
Aug 24 #PHP
You might like
php自动加载方式集合
2016/04/04 PHP
PHP批斗大会之缺失的异常详解
2019/07/09 PHP
详解Laravel设置多态关系模型别名的方式
2019/10/17 PHP
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
使用js实现数据格式化
2014/12/03 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
JS高级运动实例分析
2016/12/20 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
vue el-table实现行内编辑功能
2019/12/11 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
python实现域名系统(DNS)正向查询的方法
2016/04/19 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
django inspectdb 操作已有数据库数据的使用步骤
2021/02/07 Python
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
应届生简历中的自我评价
2014/01/13 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
房地产销售员岗位职责
2015/04/11 职场文书
车间安全生产管理制度
2015/08/06 职场文书
市级三好生竞选稿
2015/11/21 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL