参考:https://www.php.net/manual/zh/class.mongodb-driver-manager.php

参考:https://www.zhaokeli.com/article/8574.html

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' => '',
'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();
}
}

PHP使用MongoDB类操作MongoDB数据库总结的更多相关文章

  1. 42.QT-QSqlQuery类操作SQLite数据库(创建、查询、删除、修改)详解

    Qt 提供了 QtSql 模块来提供平台独立的基于 SQL 的数据库操作.这里我们所说的“平台 独立”,既包括操作系统平台,也包括各个数据库平台,Qt支持以下几种数据库: QT自带SQLITE数据库, ...

  2. [MongoDB]Python 操作 MongoDB

    from pymongo import MongoClient mc = MongoClient('localhost',27017) db = mc.users db.users.save({'na ...

  3. Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作

    2 Mongodb CRUD 操作 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mong ...

  4. 在MVC模式下通过Jqgrid表格操作MongoDB数据

    看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...

  5. nodejs操作mongodb数据库封装DB类

    这个DB类也算是我经历了3个实际项目应用的,现分享出来,有需要的请借鉴批评. 上面的注释都挺详细的,我使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关 ...

  6. python操作MONGODB数据库,提取部分数据再存储

    目标:从一个数据库中提取几个集合中的部分数据,组合起来一共一万条.几个集合,不足一千条数据的集合就全部提取,够一千条的就用一万减去不足一千的,再除以大于一千的集合个数,得到的值即为所需提取文档的个数. ...

  7. C# Asp.net中简单操作MongoDB数据库(二)

    C# Asp.net中简单操作MongoDB数据库(一)    , mongodb数据库连接可以回顾上面的篇幅. 1.model类: public class BaseEntity { /// < ...

  8. C# Asp.net中简单操作MongoDB数据库(一)

    需要引用MongoDB.Driver.dll.MongoDB.Driver.core.dll.MongoDB.Bson.dll三个dll. 1.数据库连接: public class MongoDb ...

  9. PHP操作MongoDB数据库的示例

    http://www.jquerycn.cn/a_8137 本节内容:PHP操作MongoDB数据库的简单示例. Mongodb的常用操作参看手册,php官方的http://us2.php.net/m ...

随机推荐

  1. JVM中对象是否已死

  2. Spring -07 -AOP [面向切面编程] - 使用注解@+ AspectJ 方式实现环绕/前/后等通知 -超简洁 --静态代理/动态代理{JDK/cglib}

    1.spring 不会自动去寻找注解,必须告诉 spring 哪些包下的类中可能有注解;使用注解来取代配置文件.1.1 引入xmlns:context ,指定扫描范围 <context:comp ...

  3. css 为什么给span加vertical-align: middle不起作用?

    vertical-align是什么意思?先举个例子! 这句html元素中的文本为什么不能垂直居中. <style> span{ height:60px;vertical-align: mi ...

  4. TVS瞬态抑制二极管选型指南

    一.TVS二极管工作原理 TVS(Transient Voltage Suppressors)二极管,即瞬态电压抑制器,又称雪崩击穿二极管,是采用半导体工艺制成的单个PN结或多个PN结集成的器件.TV ...

  5. 学习Spring-Data-Jpa(二)---JPA基本注解

    基本注解 1.@Entity :用于添加在实体类上,定义该JAVA类成为被JPA管理的实体,将映射到指定的数据库表.如定义一个实体类Category,它将映射到数据库中的category表中. 2.@ ...

  6. cube.js 学习(三)cube.js data schema

    cube.js的 data schema 类似graphql 的type 定义,但是cube.js 的data schema 更偏向于dsl, 其中抽象了进行数据分析应用开发中的东西,自己提炼了mea ...

  7. jdango 2.x的url配置的改变

    新版本的url.py文件中,不在使用1.x的正则表达式,强制使用在程序启动的时候会提示: WARNINGS: ?: (2_0.W001) Your URL pattern '^*article/' h ...

  8. 《挑战30天C++入门极限》理解C++面向对象程序设计中的抽象理论

        理解C++面向对象程序设计中的抽象理论 很多书在一开始就开始学习josephus问题,为了让大家前面学起来较为容易我把前面涉及到此问题的地方都故意去掉了,现在我们已经学习过了结构体和类,所以放 ...

  9. CentOS 6.5开放端口方法

    lsof -i tcp:80   列出所有端口   netstat -ntlp   1.开启端口(以80端口为例)         方法一:            /sbin/iptables -I ...

  10. SpringMVC从Session域中获取值

    SpringMVC从Session域中获取值 SpringMVC环境自行搭建 第一步:前端页面 第二步.后台代码 第三步.响应视图 第四步.在当前处理器所在的类设置@SessionAttributes ...