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 相关文章推荐
JAVA/JSP学习系列之七
Oct 09 PHP
php类中private属性继承问题分析
Nov 01 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
Dec 03 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
Jun 30 PHP
php中ob_get_length缓冲与获取缓冲长度实例
Nov 20 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
Dec 25 PHP
php生成动态验证码gif图片
Oct 19 PHP
浅析PHP中的i++与++i的区别及效率
Jun 15 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
PHP5.5新特性之yield理解与用法实例分析
Jan 11 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 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
模仿OSO的论坛(五)
2006/10/09 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
关于js遍历表格的实例
2013/07/10 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
python字典多条件排序方法实例
2014/06/30 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
Django中的用户身份验证示例详解
2019/08/07 Python
python实现ftp文件传输功能
2020/03/20 Python
pygame实现弹球游戏
2020/04/14 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
员工自我鉴定范文
2013/10/06 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书
期末个人总结范文
2015/02/13 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android
SQL Server Agent 服务无法启动
2022/04/20 SQL Server