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 数组动态添加实现代码(最土团购系统的价格排序)
Dec 30 PHP
windows下zendframework项目环境搭建(通过命令行配置)
Dec 06 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
Apr 29 PHP
PHP安装threads多线程扩展基础教程
Nov 17 PHP
在php中设置session用memcache来存储的方法总结
Jan 14 PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 PHP
Smarty环境配置与使用入门教程
May 11 PHP
PHP中Array相关函数简介
Jul 03 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
php生成二维码不保存服务器还有下载功能的实现代码
Aug 09 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
2014/05/10 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
JS 常用校验函数
2009/03/26 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
2013/06/08 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
基于javascript实现文字无缝滚动效果
2016/03/22 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
前后端如何实现登录token拦截校验详解
2018/09/03 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
在Python中实现贪婪排名算法的教程
2015/04/17 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
python多任务及返回值的处理方法
2019/01/22 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
Python 面向对象部分知识点小结
2020/03/09 Python
详解Python设计模式之策略模式
2020/06/15 Python
python 可视化库PyG2Plot的使用
2021/01/21 Python
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
李维斯牛仔裤荷兰官方网站:Levi’s NL
2020/08/23 全球购物
高三毕业生自我鉴定
2013/12/20 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
超市客服工作职责
2014/06/11 职场文书
简历上的自我评价,该怎么写呢?
2019/06/13 职场文书
MySQL 数据库范式化设计理论
2022/04/22 MySQL
Nginx跨域问题解析与解决
2022/08/05 Servers