使用MongoDB类操作MongoDB数据库总结
时间:2019-07-04
本文章向大家介绍使用MongoDB类操作MongoDB数据库总结,主要包括使用MongoDB类操作MongoDB数据库总结使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
参考:https://www.php.net/manual/zh/class.mongodb-driver-manager.php
Driver\Manager 入口文件,一般都要先实例化该类
Driver\BulkWrite 读写类,数据库的增、删、改都要先靠该类来实现
Driver\Query 查询类,MongoDB支持丰富的查询方式,所以单独拿出来组建了一个类
Driver\Cursor 返回结果类,其实就是一个Cursor类的一个对象,该类有内置的toArray()函数可以结果转换成数组形式的
BSON\ObjectID MongoDB默认创建的索引是_id,在添加的时候可以指定_id,给类就是可以创建一个指定内容的_id
我使用上述类简单操作MongoDB的时运行的顺序是:
实例化Manager类
要进行增删改操作时,实例化BulkWrite类,并根据需要的操作执行该类中的insert、delete、update方法,要进行查询时,实例化Query类
接着根据2中的操作,选择运行Manager类的executeQuery或者executeBulkWrite两个操作中的一个,返回结果类型是Cursor类,运行Cursor类的toArray方法,就能将结果从对象转换成数组,虽然其中还是会包含对象,但是比起单纯处理对象无疑是方便多了的。
这里贴一个基础操作类,把上面的过程进行了整合:
class MongoDBOperate { private $config = array( 'host' => '127.0.0.1', 'port' => '27017', 'user' => '', 'passwords' => '', 'db' => 'test' ); // MongoDB\Driver入口类 private $Manage; function __construct() { try { $this->Manage = new MongoDB\Driver\Manager("mongodb://" . $this->config['host'] . "/" . $this->config['port']); } catch (Exception $exception) { echo $exception->getMessage(); } } /** * @param $collection * @param $data * @return array * 新增数据 */ public function insert($collection, $data) { // 返回结果_id $_ids = array(); $BulkWrite = new MongoDB\Driver\BulkWrite(); if (is_array(current($data))) { foreach ($data as $key => $datum) { $_id = new MongoDB\BSON\ObjectID(); $datum['_id'] = $_id; $BulkWrite->insert($datum); $_ids[] = $_id->oid; } } else { $_id = new MongoDB\BSON\ObjectID(); $data['_id'] = $_id; $BulkWrite->insert($data); $_ids = $_id->oid; } $this->Manage->executeBulkWrite($this->config['db'] . "." . $collection, $BulkWrite); return $_ids; } /** * @param $collection * @param $filter * 删除数据 */ public function delete($collection,$filter){ $BulkWrite=new MongoDB\Driver\BulkWrite(); if(is_array(current($filter))){ foreach ($filter as $key=>$value){ $BulkWrite->delete($value); } }else{ $BulkWrite->delete($filter); } $this->Manage->executeBulkWrite($this->config['db'].".".$collection,$BulkWrite); } /** * @param $collection * @param $filter * @param $data * 更新数据 */ public function update($collection,$filter,$data){ $BulkWrite=new MongoDB\Driver\BulkWrite(); if(is_array(current($filter))){ foreach ($filter as $key=>$value){ $BulkWrite->update($value,$data[$key]); } }else{ // var_dump($filter); // var_dump($data); $BulkWrite->update($filter,$data); } $this->Manage->executeBulkWrite($this->config['db'].".".$collection,$BulkWrite); } /** * @param $collection * @param $filter * @return array * 查看数据 */ public function select($collection,$filter){ $Query=new MongoDB\Driver\Query($filter); $cursor=$this->Manage->executeQuery($this->config['db'].".".$collection,$Query); return $cursor->toArray(); } }
原文地址:https://www.cnblogs.com/rxbook/p/11132294.html
- php 实现文件下载
- Linux下Sublime Text 2的安装
- php判断客户端UserAgent
- CSS基础语法(二) CSS的9种选择器
- vue表单详解——小白速会
- php curl获取网页内容乱码和获取不到内容的解决方法
- vue组件详解(一)——组件与复用
- 【LeetCode 459】关关的刷题日记42 – Repeated Substring Pattern
- HDU 1848 Fibonacci again and again(SG函数)
- php 分页相关
- 最简单的php导出excel文件方法
- vue组件详解(二)——使用props传递数据
- Android获取QQ和微信的聊天记录,并保存到数据库
- 博弈论进阶之SG函数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【翻译】.NET 5中的性能改进
- 腾讯云实时语音识别-iOS SDK
- JointPoint用法及与ProceedingJoinPoint 的关系
- Spring中的异步请求、异步调用及demo测试
- 以太坊交易签名解析源码解读
- 比较NaN和数字
- GO 的方法集
- 轻松应对并发问题,简易的火车票售票系统,第一步 —业务分析
- 【Spark Operator】核数设置Cores/Cores Limit/Cores Request,你搞清楚没有?
- 【Ceph RGW】radosgw_usage_exporter监控用户使用量
- 【Goland】#{key}=#{value},字符串被格式化了?
- Variable变量
- 案例:OGG目标端进程ABENDED处理
- Elasticsearch深分页以及排序查询问题
- 聊聊dubbo-go的HystrixFilter