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世纪万年历
Dec 06 PHP
详解php的魔术方法__get()和__set()使用介绍
Sep 19 PHP
解析PHP中如何将数组变量写入文件
Jun 06 PHP
php四种基础算法代码实例
Oct 29 PHP
destoon二次开发入门示例
Jun 20 PHP
CodeIgniter模板引擎使用实例
Jul 15 PHP
自定义session存储机制避免会话保持问题
Oct 08 PHP
万能的php分页类
Jul 06 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
PHP join()函数用法与实例讲解
Mar 11 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
Jul 24 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中static和const关键字用法分析
2016/12/07 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
自定义vue全局组件use使用、vuex的使用详解
2017/06/14 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
select标签设置默认选中的选项方法
2018/03/02 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
详解如何用webpack4从零开始构建react开发环境
2019/01/27 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
2019/10/26 Javascript
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
python安装Scrapy图文教程
2017/08/14 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
美国打印机墨水和碳粉购物网站:QuikShip Toner
2018/08/29 全球购物
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
工厂厂长岗位职责
2013/11/08 职场文书
村党支部换届选举方案
2014/05/02 职场文书
物资采购方案
2014/06/12 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
学校会议通知范文
2015/04/15 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫