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 相关文章推荐
用PHP生成自己的LOG文件
Oct 09 PHP
杏林同学录(三)
Oct 09 PHP
利用 window_onload 实现select默认选择
Oct 09 PHP
PHP管理内存函数 memory_get_usage()使用介绍
Sep 23 PHP
无需重新编译php加入ftp扩展的解决方法
Feb 07 PHP
php数组中包含中文的排序方法
Jun 03 PHP
PHP计算指定日期所在周的开始和结束日期的方法
Mar 24 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
php htmlentities()函数的定义和用法
May 13 PHP
PHP实现一个轻量级容器的方法
Jan 28 PHP
PHP的介绍以及优势详细分析
Sep 05 PHP
解决Laravel无法使用COOKIE和SESSION的问题
Oct 16 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之Memcache学习笔记
2013/06/17 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
[原创]php实现子字符串位置相互对调互换的方法
2016/06/02 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
详解Javascript 装载和执行
2014/11/17 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
2018/11/22 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
python 公共方法汇总解析
2019/09/16 Python
python异常处理try except过程解析
2020/02/03 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
成立公司计划书
2014/05/07 职场文书
企业理念标语
2014/06/09 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
党员个人年度总结
2015/02/14 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
针对吵架老公保证书
2015/05/08 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
带你学习MySQL执行计划
2021/05/31 MySQL
mysql left join快速转inner join的过程
2021/06/30 MySQL
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android