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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(1)
Oct 09 PHP
PHP判断远程url是否有效的几种方法小结
Oct 08 PHP
解析数组非数字键名引号的必要性
Aug 09 PHP
分享PHP header函数使用教程
Sep 05 PHP
PHP同时连接多个mysql数据库示例代码
Mar 17 PHP
PHP命名空间(namespace)的使用基础及示例
Aug 18 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
Oct 16 PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 PHP
Zend Framework教程之Zend_Registry对象用法分析
Mar 22 PHP
PHP命名空间namespace的定义方法详解
Mar 29 PHP
laravel中短信发送验证码的实现方法
Apr 25 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
May 15 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
不用数据库的多用户文件自由上传投票系统(3)
2006/10/09 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
Javascript remove 自定义数组删除方法
2009/10/20 Javascript
页面中js执行顺序
2009/11/09 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
jQuery 操作input中radio的技巧
2016/07/18 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
浅谈Vue数据响应
2018/11/05 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
python删除列表中重复记录的方法
2015/04/28 Python
python 远程统计文件代码分享
2015/05/14 Python
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
Python循环语句之break与continue的用法
2015/10/14 Python
Python实现文件复制删除
2016/04/19 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
2020/10/19 Python
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
路政管理专业推荐信
2013/11/11 职场文书
应用心理学个人求职信范文
2013/12/11 职场文书
会议邀请书范文
2014/02/02 职场文书
经典安踏广告词
2014/03/21 职场文书
诉讼财产保全担保书
2014/05/20 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
vscode中使用npm安装babel的方法
2021/08/02 Javascript
Python+Matplotlib+LaTeX玩转数学公式
2022/02/24 Python
深入理解 Golang 的字符串
2022/05/04 Golang