PHP7使用MongoDB\Driver\Manager类实现增删改查

2023-05-16

这篇笔记记录了PHP7使用官方扩展MongoDB\Driver提供的Manager/BulkWrite/Query/Cursor/WriteResult类实现增删改查的过程

相关笔记:
CentOS6.9安装mongodb和php-mongodb扩展
CentOS6.9yum安装mongodb和php-mongodb扩展

1.类说明

作用
MongoDB\Driver\Manager入口类,负责维护与MongoDB的连接,执行读写和命令
MongoDB\Driver\BulkWrite收集要发送到服务器的一个或多个写操作
MongoDB\Driver\Query构造查询对象
MongoDB\Driver\Cursor封装MongoDB命令或查询的结果
MongoDB\Driver\WriteResult封装执行结果

2.实现代码

插入数据

<?php
/**
 * Created by PhpStorm.
 * User: jmsite.cn
 * Date: 2019/1/30
 * Time: 13:12
 */



$manager = new MongoDB\Driver\Manager("mongodb://admin:password@192.168.75.132:27017");
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(array(
    'product_id'        => 123,
    'product_name'      => 'Gregory 格里高利登山包B75蓝色新款',
    'product_price'     => 2139.00,
));
$bulk->insert(array(
    'product_id'        => 124,
    'product_name'      => 'Osprey 小鹰登山包Aether AG苍穹 70L蓝色',
    'product_price'     => 2099.00,
));
$bulk->insert(array(
    'product_id'        => 125,
    'product_name'      => 'GRANITE GEAR 花岗岩登山包光环追踪85L红色',
    'product_price'     => 1800.00,
));
$bulk->insert(array(
    'product_id'        => 126,
    'product_name'      => 'ARCTERYX 始祖鸟登山包Bora AR 50L婆罗洲蓝',
    'product_price'     => 4450.00,
));

try {
    $result = $manager->executeBulkWrite('db.product', $bulk);
    var_dump($result->getInsertedCount());
} catch (MongoDB\Driver\Exception\BulkWriteException $e) {
    var_dump($e->getWriteResult()->getWriteErrors());
}

执行结果

int(4)

条件查询

$manager = new MongoDB\Driver\Manager("mongodb://admin:password@192.168.75.132:27017");

$filter = ['product_price' => ['$lt' => 4000]];
$options = [
    'projection' => ['_id' => 0],
    'sort' => ['product_price' => 1],
];

$query = new MongoDB\Driver\Query($filter, $options);
$cursor = $manager->executeQuery('db.product', $query);

foreach ($cursor as $document) {
    print_r($document);
}

执行结果

stdClass Object
(
    [product_id] => 125
    [product_name] => GRANITE GEAR 花岗岩登山包光环追踪85L红色
    [product_price] => 1800
)
stdClass Object
(
    [product_id] => 124
    [product_name] => Osprey 小鹰登山包Aether AG苍穹 70L蓝色
    [product_price] => 2099
)
stdClass Object
(
    [product_id] => 123
    [product_name] => Gregory 格里高利登山包B75蓝色新款
    [product_price] => 2139
)

更新和删除数据

$manager = new MongoDB\Driver\Manager("mongodb://admin:password@192.168.75.132:27017");
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->update(array('product_id' => 123), array('$set' => array('product_price' => 1999.99)), array('multi' => false, 'upsert' => false));
$bulk->delete(array('product_id' => 125));

try {
    $result = $manager->executeBulkWrite('db.product', $bulk);
    var_dump($result->getModifiedCount());
    var_dump($result->getDeletedCount());
} catch (MongoDB\Driver\Exception\BulkWriteException $e) {
    var_dump($e->getWriteResult()->getWriteErrors());
}

执行结果

int(1)
int(1)

查询更新和删除后的结果

$manager = new MongoDB\Driver\Manager("mongodb://admin:password@192.168.75.132:27017");

$filter = [];
$options = [
    'projection' => ['_id' => 0],
    'sort' => ['product_price' => 1],
];

$query = new MongoDB\Driver\Query($filter, $options);
$cursor = $manager->executeQuery('db.product', $query);

foreach ($cursor as $document) {
    print_r($document);
}

执行结果

stdClass Object
(
    [product_id] => 123
    [product_name] => Gregory 格里高利登山包B75蓝色新款
    [product_price] => 1999.99
)
stdClass Object
(
    [product_id] => 124
    [product_name] => Osprey 小鹰登山包Aether AG苍穹 70L蓝色
    [product_price] => 2099
)
stdClass Object
(
    [product_id] => 126
    [product_name] => ARCTERYX 始祖鸟登山包Bora AR 50L婆罗洲蓝
    [product_price] => 4450
)

原文地址:https://www.jmsite.cn/blog-629.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP7使用MongoDB\Driver\Manager类实现增删改查 的相关文章

  • 【笔试】备战秋招,每日一题|20230415携程研发岗笔试

    前言 最近碰到一个专门制作大厂真题模拟题的网站 codefun2000 xff0c 最近一直在上面刷题 今天来进行2023 04 15携程研发岗笔试 xff0c 整理了一下自己的思路和代码 比赛地址 A 找到you 题意 xff1a 给定一
  • 【算法】欧拉路径的DFS存储顺序

    欧拉路径和欧拉回路 对于无向图 xff0c 所有边都是连通的 xff08 1 xff09 存在欧拉路径的充分必要条件 xff1a 度数为奇数的点只能有0个或2个 xff08 2 xff09 存在欧拉回路的充分必要条件 xff1a 度数为奇数
  • 【算法】二分图的相关性质

    二分图的定义 二分图是指将图中所有点分为两个集合 xff0c 任意一条边对应的两个点都不在同一个集合中 二分图的判定 判定一个图是否为二分图 xff0c 是考虑这个图中是否有奇数环 xff0c 如果不存在奇数环 xff0c 则图为二分图 具
  • 【比赛】LeetCode 2023 春季杯团队赛题解

    A 符文储备 题意 xff1a 给定一个数组 xff0c 问可以从中选择最多多少个连续的数 xff0c 使得这些数排序后 xff0c 相邻两个数的差最多是 1 数据范围 xff1a 1 lt 61 runes length lt 61 10
  • 关于puts和printf区别

    又是HDU2004那题 xff0c 开始是直接暴力if else puts输出的 xff0c 结果发现是 Warning passing argument 1 of 39 puts 39 makes pointer from integer
  • 高精度 求n!

    我们知道 xff0c 阶乘这玩意一般来说 xff0c 很大时可以和次方相提并论 xff0c 所以在计算机中很容易溢出 xff0c 所以对于它 xff0c 只能采用高精度求解 下面我们有两个求法 一 当所求n不大时 xff0c 这里限制范围为
  • 出租车费计算

    题目描述 某市出租车计价规则如下 xff1a 起步4公里10元 xff0c 即使你的行程没超过4公里 xff1b 接下来的4公里 xff0c 每公里2元 xff1b 之后每公里2 4元 行程的最后一段即使不到1公里 xff0c 也当作1公里
  • CSP-A - 咕咕东的奇遇

    题意 小明得到了一个神奇的圆环 这个圆环由字母表组成首尾相接的环 xff0c 环上有一个指针 xff0c 最初指向字母a 小明每次可以顺时针或者逆时针旋转一格 例如 xff0c a顺时针旋转到z xff0c 逆时针旋转到b 小明手里有一个字
  • week-4-C-TT的神秘礼物(二分答案)

    题意 TT 是一位重度爱猫人士 xff0c 每日沉溺于 B 站上的猫咪频道 有一天 xff0c TT 的好友 ZJM 决定交给 TT 一个难题 xff0c 如果 TT 能够解决这个难题 xff0c ZJM 就会买一只可爱猫咪送给 TT 任务
  • ITK(Insight Tool Kit) 医疗影像数据后处理软件模块使用和算法02

    上节说到如何在windows xff08 10 xff09 的VS xff08 2017 xff09 平台下导入ITK的library xff0c 这次咱们开始说一下咱们一开始最关心的内容 xff0c 如何用ITK来做3D图像 xff08
  • windows10 64位下tensorflow 3.6+cuda 9.0 +cudnn 9.0安装过程与踩过的雷

    在昨天之前 xff0c 我甚至还不知道GPU运行tf程序到底长啥样 xff0c 就在昨晚我开始尝试了 那么问题来了 如何在windows系统下安装tf并且成功运行呢 xff1f 我先说说大致过程 xff0c 然后吐槽下我遇到的一些坑 第一步
  • 相机校参及C-arm校参 07 - 根据2D图像计算相机的相对位姿

    已知条件为 xff1a 1 calibrated camera 校准后相机的intrisic parameters xff08 K xff09 2 Model geometry 模型中特征点 xff08 有些文献中成为标记物Tag xff0
  • Parallel Platform (Stewart Platform) 类型机械臂的正逆解 01

    并联机器人相对于串联机器人有着不同的应用场景 本文主要是基于并联机械臂的基础控制算法做一些阐述 对于机械臂的架构通讯方式 xff08 RS232 RS485 Canbus Modbus xff09 xff0c 结构设计 xff08 球关节
  • 外科手术器械设计 超声刀设计思路和原理 - 01

    换能器设计和控制是超声刀设计最重要的环节之一 xff0c 内容也比较庞大 xff0c 打算分几个章节慢慢的写 xff0c 顺便在回顾一下之前的设计测试过程 比较喜欢挑战难度从高到低 xff0c 本人硬件EE背景比较薄弱 xff0c 所以我可
  • 外科手术器械设计 超声刀设计思路和原理 - 02

    接着上文 xff0c 对于自动跟踪谐振频率的超声刀控制反馈电路做了简单的介绍 xff0c 该方式非常适合无线超声刀 xff08 无主机系统 xff09 xff0c 一方面减少了元器件的数量降低了成本 并且减少了整个handpiece的重量
  • 外科手术器械设计 超声刀设计思路和原理 - 03

    超声刀的原理通过高频的机械振动产生组织细胞内的空化效应 xff0c 相当于内爆吧 xff0c 从而达到在切割组织的同时又有凝闭血管的效果 而如何产生这类高频的机械振动呢 xff1f 换能器的核心还是压电陶瓷 xff0c 原理机制比较复杂的一
  • 外科手术器械设计 超声刀设计思路和原理 - 04

    根据上文牛顿第二定律的谐振频率模型可以得到 xff1a 又有 xff0c 在无阻尼和无外力的情况下 xff0c 可简化为 xff1a 根据简谐振动的情况 xff0c 里面的t可以用x代替 xff1b 根据二阶齐次微分方程的通解可以求得振速
  • 基于ROS机器人项目开发从零开始 (ros topic, service, msg, srv, launch, oop等基础概念) - 02

    上一节已经给大家介绍了ROS这个多功能的操作系统的概念 xff0c 和在机器人开发中可以基于我们的帮助 那么这一篇我们继续来讲ROS当中最重要的几个概念 topic service msg srv 和 OOP xff08 基于对象编程 xf
  • 基于ROS机器人项目开发基础概念 (Service,消息类型srv&msg) - 03

    上文已经介绍了ros topic的基本概念信息 在这篇文章中将介绍ros service lt server client模型 gt xff0c 和ROS中的数据类型 xff0c msg和srv 1 ROS Service Service和
  • VS2017+QT5.9 QT5.9基础大全 医疗图像处理界面设计

    包含Qt5 9所有基本控件的操作 xff0c 信号和槽函数 xff0c 和QSS样式 后面将利用Qt5 9和MITK或者MTK库做一个医疗图像处理APP 1 Signal and slot 2 QWidget基类 2 1 QRect 常用于

随机推荐