php操作mongodb封装类与用法实例


Posted in PHP onSeptember 01, 2018

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

近来学习了mongodb,刚好是做php开发的,随便写了php操作mongodb的封装类.

<?php
/**
 * Created by PhpStorm.
 * User: lee
 * Date: 2016/10/24
 * Time: 13:49
 */
namespace App\Http\Controllers\Api;
use App\Http\Common\ReturnApi;
/*
 *
 *
 mongdb常规操作
 */
class MongdbCommonController
{
  private static $conn;
  private static $mon;
  private static $error;
  private function __construct(){
    //self::$conn = new \MongoClient("mongodb://".env('MONGDB_USER').":".env('MONGDB_PASS')."@".env('MONGDB_HOST').":".env('MONGDB_PORT')."/".env('MONGDB_DB'));
    self::$conn = new \MongoClient("mongodb://".env('MONGDB_USER').":".env('MONGDB_PASS')."@".env('MONGDB_HOST').":".env('MONGDB_PORT'));
    //self::$conn = new \MongoClient("mongodb://".env('MONGDB_HOST').":".env('MONGDB_PORT'));
    $db = env('MONGDB_DB');
    self::$mon = self::$conn->$db;
  }
  public static function getInstance(){
    if(!(self::$conn instanceof self)){
      self::$conn = new self();
    }
    //return self::$conn->mydb;
    return self::$conn;
  }
  private function __clone(){
    trigger_error('Clone is not allowed');
  }//禁止克隆
  //创建索引
  public function ensureIndex($table, $index, $index_param=array())
  {
    $index_param['safe'] = 1;
    try {
      self::$mon->$table->ensureIndex($index, $index_param);
      return true;
    }
    catch (MongoCursorException $e)
    {
      self::$error = $e->getMessage();
      return false;
    }
  }
  //添加
  public function insert($table,$arr){
    try {
      self::$mon->$table->insert($arr, array('w'=>true));
      return true;
    }
    catch (MongoCursorException $e)
    {
      self::$error = $e->getMessage();
      return false;
    }
  }
  //更新
  public function update($table, $condition, $new_arr, $options=array())
  {
    $options['w'] = 1;
    if (!isset($options['multiple']))
    {
      $options['multiple'] = 0;
    }
    try {
      self::$mon->$table->update($condition, $new_arr, $options);
      return true;
    }
    catch (MongoCursorException $e)
    {
      self::$error = $e->getMessage();
      return false;
    }
  }
  //删除
  public function remove($table, $condition, $options=array())
  {
    $options['w'] = 1;
    try {
      self::$mon->$table->remove($condition, $options);
      return true;
    }
    catch (MongoCursorException $e)
    {
      self::$error = $e->getMessage();
      return false;
    }
  }
  //查找
  public function find($table, $query_condition, $result_condition=array(), $fields=array())
  {
    $cursor = self::$mon->$table->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 (MongoCursorTimeoutException $e)
    {
      self::$error = $e->getMessage();
      return false;
    }
    return $result;
  }
  //查找一条记录
  public function findOne($table, $condition, $fields=array())
  {
    return self::$mon->$table->findOne($condition, $fields);
  }
  //返回表的记录数
  public function count($table)
  {
    return self::$mon->$table->count();
  }
  //返回错误信息
  public function getError()
  {
    return self::$error;
  }
}

操作实例:

use App\Http\Controllers\Api\MongdbCommonController;
$db = MongdbCommonController::getInstance();
$collection = 'tab';
$data = array('tt' =>'sdsd',
 'pp'  => 'ssdsdf');
//返回记录数
echo $db->count($collection);
//插入记录
$db->insert($collection, array("id"=>2, "title"=>"asdqw"));
//更新
$db->update($collection, array("id"=>2),array('tt'=>'dfdfd',"gg"=>"bbb",'hh'=>'dfsdsd'));
//查找记录
echo '<pre>';
print_r( $db->find($collection, array("tt"=>'dfdfd'), array("start"=>1,"limit"=>4)));
//删除
$db->remove($collection, array('tt' =>'sdsd'));

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

PHP 相关文章推荐
php调用mysql存储过程
Feb 14 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
Feb 17 PHP
浅析php面向对象public private protected 访问修饰符
Jun 30 PHP
discuz图片顺序混乱解决方案
Jul 29 PHP
php编程每天必学之验证码
Mar 03 PHP
浅析Laravel5中队列的配置及使用
Aug 04 PHP
mac下多个php版本快速切换的方法
Oct 09 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
Nov 05 PHP
PHP中include和require的区别实例分析
May 07 PHP
PHP实现的支付宝支付功能示例
Mar 26 PHP
redis+php实现微博(二)发布与关注功能详解
Sep 23 PHP
Laravel Eloquent ORM 多条件查询的例子
Oct 10 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
Aug 30 #PHP
Django中通过定时任务触发页面静态化的处理方式
Aug 29 #PHP
PHP使用SMTP邮件服务器发送邮件示例
Aug 28 #PHP
PHP实现websocket通信的方法示例
Aug 28 #PHP
Yii2压缩PHP中模板代码的输出问题
Aug 28 #PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 #PHP
PHP两个n位的二进制整数相加问题的解决
Aug 26 #PHP
You might like
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
2016/12/19 PHP
学习YUI.Ext基础第一天
2007/03/10 Javascript
javascript 星级评分效果(手写)
2012/12/24 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
基于JavaScript实现百叶窗动画效果不只单纯flas可以实现
2016/02/29 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
js对象属性名驼峰式转下划线的实例代码
2020/09/17 Javascript
python 数据加密代码
2008/12/24 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
Python continue继续循环用法总结
2018/06/10 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
python可迭代对象去重实例
2020/05/15 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
幸福家庭标语
2014/06/27 职场文书
销售目标责任书
2014/07/23 职场文书
群众路线教育实践活动思想汇报(2014特荐篇)
2014/09/16 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python