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 相关文章推荐
使用Apache的rewrite技术
Jun 22 PHP
php 文件上传系统手记
Oct 26 PHP
PHP备份数据库生成SQL文件并下载的函数代码
Feb 05 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
PHP面向对象之旅:深入理解static变量与方法
Jan 06 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
Jul 18 PHP
ThinkPHP的MVC开发机制实例解析
Aug 23 PHP
php生成二维码时出现中文乱码的解决方法
Dec 18 PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 PHP
php结合md5的加密解密算法实例
Sep 30 PHP
Laravel5.5新特性之友好报错以及展示详解
Aug 13 PHP
PHP中的Iterator迭代对象属性详解
Apr 12 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 array_multisort() 函数的深入解析
2013/06/20 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
2010/03/04 Javascript
学习并汇集javascript匿名函数
2010/11/25 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
python导出chrome书签到markdown文件的实例代码
2017/12/27 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
python中字符串的编码与解码详析
2020/12/03 Python
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
拓展策划方案
2014/06/03 职场文书
装配出错检讨书
2014/09/23 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
免职证明样本
2014/10/23 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
python中sys模块的介绍与实例
2021/04/17 Python
深入理解Vue的数据响应式
2021/05/15 Vue.js
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏
漫画《催眠麦克风-Dawn Of Divisions》第二卷PV公开
2022/04/05 日漫
box-shadow单边阴影的实现
2023/05/21 HTML / CSS