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 相关文章推荐
图书管理程序(三)
Oct 09 PHP
PHP session常见问题集锦及解决办法总结
Mar 18 PHP
php adodb分页实现代码
Mar 19 PHP
php性能优化分析工具XDebug 大型网站调试工具
May 22 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
Jun 06 PHP
php whois查询API制作方法
Jun 23 PHP
用PHP实现 上一篇、下一篇的代码
Sep 29 PHP
Zend Framework教程之Resource Autoloading用法实例
Mar 08 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 PHP
PHP简单读取PDF页数的实现方法
Jul 21 PHP
PHP构造二叉树算法示例
Jun 21 PHP
使用PHP开发留言板功能
Nov 19 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
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
PHP实现递归无限级分类
2015/10/22 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
2014/06/05 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
jQuery验证插件validate使用详解
2016/05/11 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
Angular.JS去掉访问路径URL中的#号详解
2017/03/30 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
2018/01/08 jQuery
解决Mac node版本升级失败的问题
2018/05/16 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
Python程序语言快速上手教程
2012/07/18 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
Python实现的企业粉丝抽奖功能示例
2019/07/26 Python
python输出决策树图形的例子
2019/08/09 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
实习自我鉴定范文
2013/10/30 职场文书
大一新生军训时的自我评价分享
2013/12/05 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
离婚被告代理词
2015/05/23 职场文书
python 爬取华为应用市场评论
2021/05/29 Python
CSS极坐标的实例代码
2021/06/03 HTML / CSS
英镑符号 £
2022/02/17 杂记