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计算上一个月的今天
May 23 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
Oct 21 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
详解PHP数组赋值方法
Nov 07 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
Aug 02 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
PHP如何搭建百度Ueditor富文本编辑器
Sep 21 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 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判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
js的回调函数详解
2015/01/05 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
2019/05/10 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
JS实现页面数据懒加载
2020/02/13 Javascript
Python 实现链表实例代码
2017/04/07 Python
python re模块的高级用法详解
2018/06/06 Python
python实现三次样条插值
2018/12/17 Python
tensorflow的计算图总结
2020/01/12 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
详解Python 最短匹配模式
2020/07/29 Python
详解Python流程控制语句
2020/10/28 Python
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
请说出以下代码输出什么
2013/08/30 面试题
学生自我鉴定范文
2013/10/04 职场文书
物流专业大学应届生求职信
2013/11/03 职场文书
董事长秘书岗位职责
2013/11/29 职场文书
大学生党员自我批评
2014/02/14 职场文书
计划生育个人总结
2015/03/02 职场文书
导游词之西安骊山
2019/12/20 职场文书
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android