PHP实现的mongoDB数据库操作类完整实例


Posted in PHP onApril 10, 2018

本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下:

最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。

众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

面向集合存储,易存储对象类型的数据。
模式自由。
支持动态查询。
支持完全索引,包含内部对象。
支持查询。
支持复制和故障恢复。
使用高效的二进制数据存储,包括大型对象(如视频等)。
自动处理碎片,以支持云计算层次的扩展性
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
文件存储格式为BSON(一种JSON的扩展)
可通过网络访问

所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定 义任何模式(schema)。

模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。

存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。

MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB

在32位模式运行时支持的最大文件尺寸为2GB。

MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。

小编自己封装的PHP操作MongoDB数据库的数据库操作类源码如下,仅供参考。

<?php
/**
 * PHP操作mongodb数据库操作类
 */
class Database {
  protected $database  = '';
  protected $mo;
  /**
   * 构造方法
   */
  public function __construct() {
    $server = DBSERVER;
    $user = DBUSER;
    $password = DBPASS;
    $port = DBPORT;
    $database = DBNAME;
    $mongo = $this->getInstance($server, $user, $password, $port);
    $this->database = $mongo->$database;
  }
  /**
   * 数据库单例方法
   * @param $server
   * @param $user
   * @param $password
   * @param $port
   * @return Mongo
   */
  public function getInstance($server, $user, $password, $port) {
    if (isset($this->mo)) {
      return $this->mo;
    } else {
      if (!empty($server)) {
        if (!empty($port)) {
          if (!empty($user) && !empty($password)) {
            $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
          } else {
            $this->mo = new Mongo("mongodb://{$server}:{$port}");
          }
        } else {
          $this->mo = new Mongo("mongodb://{$server}");
        }
      } else {
        $this->mo = new Mongo();
      }
      return $this->mo;
    }
  }
  /**
   * 查询表中所有数据
   * @param $table
   * @param array $where
   * @param array $sort
   * @param string $limit
   * @param string $skip
   * @return array|int
   */
  public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    if (!empty($where)) {
      $data = $this->database->$table->find($where);
    } else {
      $data = $this->database->$table->find();
    }
    if (!empty($sort)) {
      $data = $data->sort($sort);
    }
    if (!empty($limit)) {
      $data = $data->limit($limit);
    }
    if (!empty($skip)) {
      $data = $data->skip($skip);
    }
    $newData = array();
    while ($data->hasNext()) {
      $newData[] = $data->getNext();
    }
    if (count($newData) == 0) {
      return 0;
    }
    return $newData;
  }
  /**
   * 查询指定一条数据
   * @param $table
   * @param array $where
   * @return int
   */
  public function getOne($table, $where = array()) {
    if (!empty($where)) {
      $data = $this->database->$table->findOne($where);
    } else {
      $data = $this->database->$table->findOne();
    }
    return $data;
  }
  /**
   * 统计个数
   * @param $table
   * @param array $where
   * @return mixed
   */
  public function getCount($table, $where = array()) {
    if (!empty($where)) {
      $data = $this->database->$table->find($where)->count();
    } else {
      $data = $this->database->$table->find()->count();
    }
    return $data;
  }
  /**
   * 直接执行mongo命令
   * @param $sql
   * @return array
   */
  public function toExcute($sql) {
    $result = $this->database->execute($sql);
    return $result;
  }
  /**
   * 分组统计个数
   * @param $table
   * @param $where
   * @param $field
   */
  public function groupCount($table, $where, $field) {
    $cond = array(
      array(
        '$match' => $where,
      ),
      array(
        '$group' => array(
          '_id' => '$' . $field,
          'count' => array('$sum' => 1),
        ),
      ),
      array(
        '$sort' => array("count" => -1),
      ),
    );
    $this->database->$table->aggregate($cond);
  }
  /**
   * 删除数据
   * @param $table
   * @param $where
   * @return array|bool
   */
  public function toDelete($table, $where) {
    $re = $this->database->$table->remove($where);
    return $re;
  }
  /**
   * 插入数据
   * @param $table
   * @param $data
   * @return array|bool
   */
  public function toInsert($table, $data) {
    $re = $this->database->$table->insert($data);
    return $re;
  }
  /**
   * 更新数据
   * @param $table
   * @param $where
   * @param $data
   * @return bool
   */
  public function toUpdate($table, $where, $data) {
    $re = $this->database->$table->update($where, array('$set' => $data));
    return $re;
  }
  /**
   * 获取唯一数据
   * @param $table
   * @param $key
   * @return array
   */
  public function distinctData($table, $key, $query = array()) {
    if (!empty($query)) {
      $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    } else {
      $where = array('distinct' => $table, 'key' => $key);
    }
    $data = $this->database->command($where);
    return $data['values'];
  }
}
?>

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

PHP 相关文章推荐
PHP中路径问题的解决方案
Oct 09 PHP
DedeCMS dede_channeltype表字段注释
Apr 07 PHP
基于PHP文件操作的详解
Jun 05 PHP
php预定义变量使用帮助(带实例)
Oct 30 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
php命令行用法入门实例教程
Oct 27 PHP
PHP中iconv函数转码时截断字符问题的解决方法
Jan 21 PHP
Linux php 中文乱码的快速解决方法
May 13 PHP
php实现购物车功能(以大苹果购物网为例)
Mar 09 PHP
Laravel模型间关系设置分表的方法示例
Apr 21 PHP
PHP实现常用排序算法的方法
Feb 05 PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 PHP
PHP实现的简单组词算法示例
Apr 10 #PHP
PHP实现的大文件切割与合并功能示例
Apr 10 #PHP
PHP实现分布式memcache设置web集群session同步的方法
Apr 10 #PHP
PHP实现Redis单据锁以及防止并发重复写入
Apr 10 #PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
Apr 09 #PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
Apr 09 #PHP
PHP缓存工具XCache安装与使用方法详解
Apr 09 #PHP
You might like
基于php设计模式中单例模式的应用分析
2013/05/15 PHP
php与flash as3 socket通信传送文件实现代码
2014/08/16 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
javascript实现unicode和字符的互相转换
2007/07/18 Javascript
javascript高亮效果的二种实现方法
2008/09/14 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
微信小程序 出现错误:{&quot;baseresponse&quot;:{&quot;errcode&quot;:-80002,&quot;errmsg&quot;:&quot;&quot;}}解决办法
2017/02/23 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
python时间整形转标准格式的示例分享
2014/02/14 Python
python和ruby,我选谁?
2017/09/13 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
最新pycharm安装教程
2020/11/18 Python
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
中式餐厅创业计划书范文
2014/01/23 职场文书
安全标语口号
2014/06/09 职场文书
学雷锋活动总结报告
2014/06/26 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
政府会议通知范文
2015/04/15 职场文书
2016年寒假政治学习心得体会
2015/10/09 职场文书
员工工作心得体会
2019/05/07 职场文书
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技