php实现的mongodb操作类


Posted in PHP onMay 28, 2015

mongo_db.php

<?php
 
/**
 * Created by PhpStorm.
 * User: yangyulong
 * Date: 2015/5/26
 * Time: 13:45
 */
class Mongo_db
{
  private static $instanceof = NULL;
  public $mongo;
  private $host = 'localhost';
  private $port = '27017';
 
  private $db;
  public $dbname;
  private $table = NULL;
 
  /**
   * 初始化类,得到mongo的实例对象
   */
  public function __construct($host = NULL, $port = NULL, $dbname = NULL, $table = NULL)
  {
 
    if (NULL === $dbname) {
      $this->throwError('集合不能为空!');
    }
 
    //判断是否传递了host和port
    if (NULL !== $host) {
      $this->host = $host;
    }
 
    if (NULL !== $port) {
      $this->port = $port;
    }
 
    $this->table = $table;
 
    $this->mongo = new MongoClient($this->host . ':' . $this->port);
    if ($this->getVersion() >= '0.9.0') {
      $this->dbname = $this->mongo->selectDB($dbname);
      $this->db = $this->dbname->selectCollection($table);
    } else {
      $this->db = $this->mongo->$dbname->$table;
    }
  }
 
  public function getVersion()
  {
    return MongoClient::VERSION;
  }
 
  /**
   * 单例模式
   * @return Mongo|null
   */
  //public static function getInstance($host=null, $port=null, $dbname=null, $table=null){
  //
  //  if(!(self::$instanceof instanceof self)){
  //    self::$instanceof = new self($host, $port, $dbname, $table);
  //  }
  //
  //  return self::$instanceof;
  //}
 
  /**
   * 插入一条数据
   * @param array $doc
   */
  public function insert($doc = array())
  {
    if (empty($doc)) {
      $this->throwError('插入的数据不能为空!');
    }
    //保存数据信息
    try {
      if (!$this->db->insert($doc)) {
        throw new MongoException('插入数据失败');
      }
    } catch (MongoException $e) {
      $this->throwError($e->getMessage());
    }
  }
 
  /**
   * 插入多条数据信息
   * @param array $doc
   */
  public function insertMulti($doc = array())
  {
    if (empty($doc)) {
      $this->throwError('插入的数据不能为空!');
    }
    //插入数据信息
    foreach ($doc as $key => $val) {
      //判断$val是不是数组
      if (is_array($val)) {
        $this->insert($val);
      }
    }
  }
 
  /**
   * 查找一条记录
   * @return array|null
   */
  public function findOne($where = NULL)
  {
    if (NULL === $where) {
      try {
        if ($result = $this->db->findOne()) {
          return $result;
        } else {
          throw new MongoException('查找数据失败');
        }
      } catch (MongoException $e) {
        $this->throwError($e->getMessage());
      }
    } else {
      try {
        if ($result = $this->db->findOne($where)) {
          return $result;
        } else {
          throw new MongoException('查找数据失败');
        }
      } catch (MongoException $e) {
        $this->throwError($e->getMessage());
      }
    }
 
  }
 
  /**
   * todo 带条件的随后做
   * 查找所有的文档
   * @return MongoCursor
   */
  public function find($where = NULL)
  {
    if (NULL === $where) {
 
      try {
        if ($result = $this->db->find()) {
 
        } else {
          throw new MongoException('查找数据失败');
        }
      } catch (MongoException $e) {
        $this->throwError($e->getMessage());
      }
    } else {
      try {
        if ($result = $this->db->find($where)) {
 
        } else {
          throw new MongoException('查找数据失败');
        }
      } catch (MongoException $e) {
        $this->throwError($e->getMessage());
      }
    }
 
    $arr = array();
    foreach ($result as $id => $val) {
      $arr[] = $val;
    }
 
    return $arr;
  }
 
  /**
   * 获取记录条数
   * @return int
   */
  public function getCount()
  {
    try {
      if ($count = $this->db->count()) {
        return $count;
      } else {
        throw new MongoException('查找总数失败');
      }
    } catch (MongoException $e) {
      $this->throwError($e->getMessage());
    }
  }
 
  /**
   * 获取所有的数据库
   * @return array
   */
  public function getDbs()
  {
    return $this->mongo->listDBs();
  }
 
  /**
   * 删除数据库
   * @param null $dbname
   * @return mixed
   */
  public function dropDb($dbname = NULL)
  {
    if (NULL !== $dbname) {
      $retult = $this->mongo->dropDB($dbname);
      if ($retult['ok']) {
        return TRUE;
      } else {
        return FALSE;
      }
    }
    $this->throwError('请输入要删除的数据库名称');
  }
 
  /**
   * 强制关闭数据库的链接
   */
  public function closeDb()
  {
    $this->mongo->close(TRUE);
  }
 
  /**
   * 输出错误信息
   * @param $errorInfo 错误内容
   */
  public function throwError($errorInfo='')
  {
    echo "<h3>出错了:$errorInfo</h3>";
    die();
  }
 
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
php的一个简单加密解密代码
Jan 14 PHP
php查找字符串出现次数的方法
Dec 01 PHP
thinkPHP3.2简单实现文件上传的方法
May 16 PHP
PHP正则表达式入门教程(推荐)
May 18 PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
php实现文件上传及头像预览功能
Jan 15 PHP
PHP实现的简单操作SQLite数据库类与用法示例
Jun 19 PHP
PhpStorm配置Xdebug调试的方法步骤
Feb 02 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
May 14 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
Oct 02 PHP
PHP实现本地图片转base64格式并上传
May 29 PHP
PHP编译安装时常见错误解决办法
May 28 #PHP
PHP安装memcached扩展笔记
May 28 #PHP
PHP实现的增强性mhash函数
May 27 #PHP
PHP验证信用卡卡号是否正确函数
May 27 #PHP
PHP的伪随机数与真随机数详解
May 27 #PHP
php实现window平台的checkdnsrr函数
May 27 #PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 #PHP
You might like
新的一年,新的期待:DC在2020年的四部动画电影
2020/01/01 欧美动漫
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
提高php运行速度的一些小技巧分享
2012/07/03 PHP
php解析http获取的json字符串变量总是空白null
2015/03/02 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
js每次Title显示不同的名言
2008/09/25 Javascript
JavaScript delete 属性的使用
2009/10/08 Javascript
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
Angular的$http与$location
2016/12/26 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
python采集微信公众号文章
2018/12/20 Python
简单了解Python3里的一些新特性
2019/07/13 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
PageFactory设计模式基于python实现
2020/04/14 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
三陽商会官方网站:Sanyo iStore
2019/05/15 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
写自荐信要注意什么
2013/12/26 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
2014年化工厂工作总结
2014/11/25 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
2016教师廉洁教育心得体会
2016/01/13 职场文书