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下删除字符串中HTML标签的函数
Aug 27 PHP
php FPDF类库应用实现代码
Mar 20 PHP
php 静态页面中显示动态内容
Aug 14 PHP
php实现cc攻击防御和防止快速刷新页面示例
Feb 13 PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
PHP之十六个魔术方法详细介绍
Nov 01 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
Sep 29 PHP
phpinfo无法显示的原因及解决办法
Feb 15 PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 02 PHP
yii2.0框架场景的简单使用示例
Jan 25 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 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中如何调用webservice的实例参考
2013/04/25 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
js实现字符串的16进制编码不加密
2014/04/25 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
2016/12/20 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
Postman无法正常返回结果问题解决
2020/08/28 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
2021/02/05 Javascript
Python中的高级数据结构详解
2015/03/27 Python
python实现的简单猜数字游戏
2015/04/04 Python
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
如何基于python实现脚本加密
2019/12/28 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
python批量修改交换机密码的示例
2020/09/22 Python
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
电气自动化专业职业规划范文
2014/02/16 职场文书
《一本男孩子必读的书》教学反思
2014/02/19 职场文书
求职信范文大全
2014/05/26 职场文书
庆祝国庆节标语
2014/10/09 职场文书
演讲比赛主持词
2015/06/29 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python
Python中异常处理用法
2021/11/27 Python