php实现的mongodb操作类

5年以前  |  阅读数:621 次  |  编程语言:PHP 

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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例