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 相关文章推荐
基于mysql的论坛(4)
Oct 09 PHP
dede全站URL静态化改造[070414更正]
Apr 17 PHP
php strtotime 函数UNIX时间戳
Jan 14 PHP
Smarty Foreach 使用说明
Mar 23 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
PHP 解决session死锁的方法
Jun 20 PHP
php实现天干地支计算器示例
Mar 14 PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 PHP
PHP整合PayPal支付
Jun 11 PHP
解决PHP里大量数据循环时内存耗尽的方法
Oct 10 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
Apr 25 PHP
laravel框架的安装与路由实例分析
Oct 11 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 Pear 安装及使用
2009/03/19 PHP
部署PHP项目应该注意的几点事项分享
2013/12/20 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
PHP SplObjectStorage使用实例
2015/05/12 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
常用js脚本
2006/12/03 Javascript
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
JQuery获取表格数据示例代码
2014/05/26 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
js实现微信分享代码
2020/10/11 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
python 矩阵增加一行或一列的实例
2018/04/04 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
《小山羊和小灰兔》教学反思
2014/02/19 职场文书
亲子活动总结
2014/04/26 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
MySQL中varchar和char类型的区别
2021/11/17 MySQL
使用 Apache 反向代理的设置技巧
2022/01/18 Servers
公历12个月名称的由来
2022/04/12 杂记