PHP7中MongoDB Driver的使用方法

php7 只能使用Mongodb driver来驱动mongodb。

使用Mongodb Driver连接数据库

刚开始使用Mongodb Driver的时候我是拒绝的。查看官方文档只看到一排的类和不知所云的成员方法,翻了半天也找不到 find, update, delete等等关键词,更甚至稍微复杂一点的比如副本集,用户认证都不知道怎么连接数据库。
幸好文档不是完全没有,点开Mongodb\Driver\Manger::constructor 看到有几个构造参数

  • $uri 形如 mongo://[host:port,host:port,host:port]/[dbname]?[username=aa&password=bb&replicaSet=cc]
  • $uriOptions 就是上面?后面的那一串参数,可以写在这里
  • $driverOptions 其他选项比如默认的读写参数

MongodbDriver CURD操作

这就是是我一开始觉得这个驱动反人类的地方,文档里没有任何的find,update,delete等字眼,只有一个Command类和一个Query类
Query 类稍微好一些,提供了部分查询选项。
实际上,对Mongo数据库的所有操作,都可以通过Command类进行。而php的驱动文档对具体的 commandOptions 是不做介绍的。
正因为我是mongodb萌新,所以才会觉得这个驱动无比奇葩反人类,根本就无从下手。
我们使用这个驱动的关键,是用Command类构造一个commandOption
而这个commandOption需要我们从mongodb的官方文档中去了解
MONGODB MANUAL – Database Commands
所有的操作,数据增删改查,聚合排序,数据库状态,用户认证等等,都可以通过这些命令搞定。下面随便举几个例子

  • 连接数据库
$this->_conn = new MongoDB\Driver\Manager('mongodb://localhost:27017/test');
$this->_db = 'test';
// execute command.
function exec($opts) {
    $cmd = new MongoDB\Driver\Command($opts);
    $res =  $this->_conn->executeCommand($this->_db, $cmd);
    return $res->toArray();
}
  • 条件查询,按需返回
$cmd = [
    'find' => 'table', // collection表名
    'filter' => ['_id' => ['$gte' => 10, '$lt' => 20]],
    'projection' => ['name' => 1, 'email' => 1]
];
$res = $this-exec($cmd);
  • 修改记录
$cmd = [
    'update' => 'table', // collection 表名
    'updates' => [
        ['q' => [_id => ['$lt' => 10]], 'u' => ['status' => 0], 'upsert'=>0,'multi'=>1],
        ['q' => [_id => ['$gte' => 10]], 'u' => ['status' => 1], 'upsert'=>0,'multi'=>1],
    ],
    'ordered' => 1, // 是否依次执行updates语句,true表示执行失败后继续后面的语句,false 表示一旦失败立即返回
]
  • 删除记录,limit只能是1或0!
$cmd = [
    'delete' => 'table', // collection 表名
    'deletes' => [
        ['q' => [_id => ['$lt' => 5]], 'limit' => 0], // 0表示所有,1表示删除1行
    ]
]
  • 插入数据
$cmd = [
    'delete' => 'table', // collection 表名
    'deletes' => [
        ['q' => [_id => ['$lt' => 5]], 'limit' => 0], // 0表示所有,1表示删除1行
    ]
]
  • 分组,排序
$cmd = [
    'aggregate' => 'table', // collection 表名
    'pipeline' => [
        '$group' => 'class',
        '$sort' => 'score'
    ]
]
  • 读取数据库状态
$cmd = [
    'replSetGetStatus' => 1,
]

辅助类 BSON

最有用的当然是 MongoDB\BSON\JavascriptMongoDB\BSON\ObjectId ,分别是传入 javascript 脚本函数,和使用 mongodb 的ojectid。

异常 Exception

所有MongoDBDriver 产生的异常都可以用 MongoDB\Driver\Exception\Exception 捕获

原创文章,作者:VLSAN,如若转载,请注明出处:http://www.wangzhanshi.com/n/7559.html

(0)
VLSAN的头像VLSAN
上一篇 2025年1月1日 16:41:30
下一篇 2025年1月1日 16:41:32

相关推荐

  • 为什么php7比php5快

    PHP7比php5快原因总结: 1、存储变量的结构体变小,尽量使结构体里成员共用内存空间,减少引用,这样内存占用降低,变量的操作速度得到提升。 2、字符串结构体的改变,字符串信息和…

    php 2025年1月1日
  • vmware linux系统安装怎么php7

    php7比旧版本的性能提高了好多倍,linux通过yum安装php7。 首先我们先检查一下我们之前的php版本,通过yum list installed | grep php,如果…

    2025年1月1日
  • Linux用yum安装php7环境踩过的坑

    网上很多方案,使用yum安装一般采用下面的方法(此种方法有可能会安装不成功); 安装epel-release rpm -ivh http://dl.fedoraproject.or…

    php 2025年1月1日
  • ThinkPHP实现定时任务的操作步骤

    接到一个需求:定时检查设备信息,2分钟没有心跳的机器,推送消息给相关人员,用thinkphp5框架,利用框架自带的任务功能与crontab配合来完成定时任务。 第一步:分析需求 先…

    2024年12月17日
  • PHP5常用函数列表分享

    如下所示: 复制代码 代码如下:   usleep() 函数延迟代码执行若干微秒。  unpack() 函数从二进制字符串对数据进行解包。  uniqid() 函数基于以微秒计的当…

    php 2025年1月2日
  • linux下php7的安装教程

    本文操作环境:linux5.9.8系统、PHP7.1版,DELL G3电脑 linux php7安装教程 1、首先下载php7对应版本,解压到指定目录 2、安装gcc yum&nb…

    php 2025年1月1日
  • 如何使用PHP file_exists函数检查文件是否存在

    php file_exists函数 在PHP中,我们经常需要检查文件是否存在以便进行相应的处理。PHP提供了一个很方便的函数file_exists来实现这个功能。本文将介绍如何使用…

    php 2024年12月17日
  • 在CentOS和RHEL上安装PHP7的方法

    php7.3是php的最新稳定版本,yum存储库正在为php7提供RPM包。本篇文章将使用remi和epel-yum存储库在你的系统上安装所需的软件包,将介绍在CentOS和Red…

    2025年1月1日
  • php7和php5对比的示例

    PHP7 PHP7刚出道就号称比旧版本快了几倍,各种开源框架或系统运行在PHP7上速度效率提高了几倍,反正不管是媒体还是开发者都在煽风点火,不,应该是赞不绝口。 我就静静看你们装逼…

    2025年1月1日
  • PHP7添加非空合并语法糖

    我们知道从 PHP 5.3 起三元运算符 ? : 有一个写法简洁写法是这样的: <?php $a = 0; $b = $a ?: 1; # $b === 1 这实际上相当于:…

    php 2025年1月1日

发表回复

登录后才能评论