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 中英文混合排版中处理字符串常用的函数
Apr 12 PHP
PHP获取Exif缩略图的方法
Jul 13 PHP
php验证邮箱和ip地址最简单方法汇总
Oct 30 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
phalcon框架使用指南
Feb 23 PHP
php轻松实现文件上传功能
Mar 03 PHP
Yii多表联合查询操作详解
Jun 02 PHP
几行代码轻松实现PHP文件打包下载zip
Mar 01 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
Laravel框架查询构造器 CURD操作示例
Sep 04 PHP
laravel框架使用极光推送消息操作示例
Feb 15 PHP
PHP中strval()函数实例用法
Jun 07 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 获取一个月第一天与最后一天的代码
2010/05/16 PHP
PHP通用检测函数集合
2011/02/08 PHP
Yii学习总结之安装配置
2015/02/22 PHP
Yii数据库缓存实例分析
2016/03/29 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
2014/01/09 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
Python中自定义函数的教程
2015/04/27 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Python自动生产表情包
2017/03/17 Python
对命令行模式与python交互模式介绍
2018/05/12 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
市场营销个人求职信范文
2014/02/02 职场文书
四风存在的原因分析
2014/02/11 职场文书
数学高效课堂实施方案
2014/03/29 职场文书
担保书格式及范文
2014/04/01 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python
Python3使用Qt5来实现简易的五子棋小游戏
2022/05/02 Python