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 相关文章推荐
1.PHP简介
Oct 09 PHP
cmd下运行php脚本
Nov 25 PHP
php实现首页链接查询 友情链接检查的代码
Jan 05 PHP
PHP学习之数组值的操作
Apr 17 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 PHP
PHP批量生成静态HTML的简单原理和方法
Apr 20 PHP
神盾加密解密教程(三)PHP 神盾解密工具
Jun 08 PHP
php实现的Cookies操作类实例
Sep 24 PHP
PHP对象克隆clone用法示例
Sep 28 PHP
php实现的三个常用加密解密功能函数示例
Nov 06 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
Oct 11 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 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的FTP学习(一)[转自奥索]
2006/10/09 PHP
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
基于xcache的配置与使用详解
2013/06/18 PHP
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
php7 安装yar 生成docker镜像
2017/05/09 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
javascript面向对象之二 命名空间
2011/02/08 Javascript
js原生appendChild的bug解决心得分享
2013/07/01 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
python的dict,set,list,tuple应用详解
2014/07/24 Python
python网络编程实例简析
2014/09/26 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
Python2/3中urllib库的一些常见用法
2017/12/19 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
用CSS3的box-reflect来制作倒影效果
2016/11/15 HTML / CSS
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
环保倡议书50字
2014/05/15 职场文书
美术专业自荐信
2014/07/07 职场文书
推广活动策划方案
2014/08/23 职场文书
2014年保育员工作总结
2014/12/02 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
Java数据结构之链表相关知识总结
2021/06/18 Java/Android
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
Java中try catch处理异常示例
2021/12/06 Java/Android