PHP7 mongoDB扩展使用的方法分享


Posted in PHP onMay 02, 2019

前言

最近在做的项目需要将PHP5.6升级到PHP7.0,使用过PHP-mongo扩展的同学应该知道,PHP7.0的mongodb扩展是完全不兼容PHP5.6的mongo扩展的,php-mongodb改如何使用呢。

下面直接说明各种方法的使用:

1.mongodb连接:

private function connect($confArr) {
 try{
  $connStr = "mongodb://" . $confArr['host'] . ":" . $confArr['port'] . "/" . $confArr['db_name'];
  $options = array(
   'username' => $confArr['username'],
   'password' => $confArr['password'],
   'readPreference' => $confArr['read_preference'],
   'connectTimeoutMS' => intval($confArr['connect_timeout_ms']),
   'socketTimeoutMS' => intval($confArr['socket_timeout_ms']),
  );
  $mc = new MongoDB\Driver\Manager($connStr, $options);
  return $mc;
 }
 catch(Exception $e){
  return false;
 }
}

2.查询find:

public function find($query = array(), $fields = array(), $collection, $sort = array(), $limit = 0, $skip = 0) {
 $conn = $this->connect();
 if (empty($conn)) {
  return false;
 }
 try {
  $data = array();
  $options = array();
  if (!empty($query)) {
   $options['projection'] = array_fill_keys($fields, 1);
  }
  if (!empty($sort)) {
   $options['sort'] = $sort;
  }
  if (!empty($limit)) {
   $options['skip'] = $skip;
   $options['limit'] = $limit;
  }
  $mongoQuery = new MongoDB\Driver\Query($query, $options);
  $readPreference = new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY);
  $cursor = $conn->executeQuery($collection, $mongoQuery, $readPreference);
  foreach($cursor as $value) {
   $data[] = (array)$value;
  }
  return $data;
 } catch (Exception $e) {
  //记录错误日志
 }
 return false;
}

3.插入操作insert:

public function insert($addArr, $collection) {
 if (empty($addArr) || !is_array($addArr)) {
  return false;
 }
 $conn = $this->connect();
 if (empty($conn)) {
  return false;
 }
 try {
  $bulk = new MongoDB\Driver\BulkWrite();
  $bulk->insert($addArr);
  $writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 6000);
  $result = $conn->executeBulkWrite($collection, $bulk, $writeConcern);
  if ($result->getInsertedCount()) {
   return true;
  }
 } catch (Exception $e) {
  //记录错误日志
 }
 return false;
}

4.删除delete:

public function delete($whereArr, $options = array(), $collection) {
 if (empty($whereArr)) {
  return false;
 }
 if (!isset($options['justOne'])) {
  $options = array(
   'justOne' => false,
  );
 }
 $conn = $this->connect();
 if (empty($conn)) {
  return false;
 }
 try {
  $bulk = new MongoDB\Driver\BulkWrite();
  $bulk->delete($whereArr, $options);
  $writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 30000);
  $result = $conn->executeBulkWrite($collection, $bulk, $writeConcern);
  return true;
 } catch (Exception $e) {
  //记录错误日志
 }
 return false;
}

5.执行command操作:

private function command($params, $dbName) {
 $conn = $this->connect();
 if (empty($conn)) {
  return false;
 }
 try {
  $cmd = new MongoDB\Driver\Command($params);
  $result = $conn->executeCommand($dbName, $cmd);
  return $result;
 } catch (Exception $e) {
  //记录错误
 }
 return false;
}

6.统计count:

public function count($query, $collection) {
 try {
  $cmd = array(
   'count' => $collection,
   'query' => $query,
  );
  $res = $this->command($cmd);
  $result = $res->toArray();
  return $result[0]->n;
 } catch (Exception $e) {
  //记录错误
 }
 return false;
}

7.聚合distinct:

public function distinct($key, $where, $collection) {
 try {
  $cmd = array(
   'distinct' => $collection,
   'key' => $key,
   'query' => $where,
  );
  $res = $this->command($cmd);
  $result = $res->toArray();
  return $result[0]->values;
 } catch (Exception $e) {
  //记录错误
 }
 return false;
}

8.aggregate操作:

public function aggregate($where, $group, $collection) {
 try {
  $cmd = array(
   'aggregate' => $collection,
   'pipeline' => array(
    array(
     '$match' => $where,
    ),
    array(
     '$group' => $group,
    ),
   ),
   'explain' => false,
  );
  $res = $this->command($cmd);
  if (!$res) {
   return false;
  }
  $result = $res->toArray();
  return $result[0]->total;
 } catch (Exception $e) {
  //记录错误
 }
 return false;
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
php学习之简单计算器实现代码
Jun 09 PHP
php中使用__autoload()自动加载未定义类的实现代码
Feb 06 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
Jun 12 PHP
PHP多线程编程之管道通信实例分析
Mar 07 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
PHP实现简单实用的验证码类
Jul 29 PHP
php文件缓存方法总结
Mar 16 PHP
用PHP写的一个冒泡排序法的函数简单实例
May 26 PHP
php版微信发红包接口用法示例
Sep 23 PHP
PHP数据分析引擎计算余弦相似度算法示例
Aug 08 PHP
PHP实现小程序批量通知推送
Nov 27 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
May 01 #PHP
Yii框架学习笔记之session与cookie简单操作示例
Apr 30 #PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
Apr 30 #PHP
YII框架关联查询操作示例
Apr 29 #PHP
YII框架页面缓存操作示例
Apr 29 #PHP
YII框架http缓存操作示例
Apr 29 #PHP
PHP常见的几种攻击方式实例小结
Apr 29 #PHP
You might like
在PHP中操作Excel实例代码
2010/04/29 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
Jquery Validation插件防止重复提交表单的解决方法
2010/03/05 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
jQuery Checkbox 全选 反选的简单实例
2016/11/29 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
VUE长按事件需求详解
2017/10/18 Javascript
Vue2.0 axios前后端登陆拦截器(实例讲解)
2017/10/27 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
在Create React App中启用Sass和Less的方法示例
2019/01/16 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
关于element的表单组件整理笔记
2021/02/05 Javascript
python字符串替换的2种方法
2014/11/30 Python
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
Python实现统计单词出现的个数
2015/05/28 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
波兰补充商店:Muscle Power
2018/10/29 全球购物
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
环保建议书
2014/03/12 职场文书
中学生爱国演讲稿
2014/09/05 职场文书
毕业生实习证明
2014/09/19 职场文书
成本会计岗位职责
2015/02/03 职场文书
食品安全责任书范本
2015/05/09 职场文书
紧急迫降观后感
2015/06/15 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书