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\Javascript
和 MongoDB\BSON\ObjectId
,分别是传入 javascript 脚本函数,和使用 mongodb 的ojectid。
异常 Exception
所有MongoDBDriver 产生的异常都可以用 MongoDB\Driver\Exception\Exception
捕获
转载于:https://www.cnblogs.com/dapianzi/p/9264285.html
PHP7 - MongoDB Driver 使用心得相关推荐
- PHP7 MongoDB 安装与使用
PHP7 Mongdb 扩展安装 我们使用 pecl 命令来安装: $ /usr/local/php7/bin/pecl install mongodb 执行成功后,会输出以下结果: -- Build ...
- MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集
MongoDB复制集(Replica Set)通过存储多份数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用.但需要注意的时,连接副本集的姿势如果不对,服务高可用将不复存在. 使用复 ...
- 万万没想到,一个 MongoDB.Driver 的 bug 导致 .NET5 程序死锁!
一:背景 1. 讲故事 这个月初,星球里的一位朋友找到我,说他的程序出现了死锁,怀疑是自己的某些写法导致mongodb出现了如此尴尬的情况,截图如下: 说实话,看过这么多dump,还是第一次遇到真实的 ...
- Php7 mongodb explain,【代码片-1】 php7 mongoDB 简单封装
/** * mongoDB 简单 封装 * 注意:支持 mongoDB 3.2+ * * @author color_wind */ finalclassm_mgdb { privatestatic$ ...
- MongoDB Driver:使用正确的姿势连接复制集
MongoDB复制集(Replica Set)通过存储多份数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用.但需要注意的时,连接副本集的姿势如果不对,服务高可用将不复存在. 使用复 ...
- linux php7 mongodb,CentOS 7下安装配置PHP7跟LAMP及MongoDB和Redis
CentOS 7下安装配置PHP7跟LAMP及MongoDB和Redis 我是想能yum就yum,所有软件的版本一直会升级,注意自己当时的版本是不是已经更新了. 首先装CentOS 7 装好cento ...
- php7 mongodb 分组 排序 查询
$manager = new Manager('mongodb://ip:sort');$param = ['aggregate' => 'collection名称','pipeline' =& ...
- .NET MongoDB Driver 2.2使用示例
说明:mongoDBService是对各种常用操作的封装 public class MongoDBService {#region 变量/// <summary>/// 缓存/// < ...
- php7.1安装mysqli扩展,centos php7 安装mysqli扩展心得
在新配服务器时发现,php无法连接到mysql.通过phpinfo发现.根本没有显示mysqli的相关配置.经过一系列研究.总结了下.: 第一步: 在phpinfo里没有mysqli配置,原因是安装p ...
最新文章
- 新趋势:工具赋能企业数字化转型,驱动组织升级!
- RHEL7 单独安装图形 X11
- HDU 4712 Hamming Distance(随机算法)
- emacs 安装auto-complete
- python Day6 面向对象学习
- html中小于和大于怎么判断,html – CSS nth-child大于和小于
- MMC 不能打开文件
- java字节码常量池_java字节码常量池处理说明
- 多CPU,多核,多进程,多线程以及进程和线程的简单理解以及区别
- Oracle 中间件云服务器系统 ExaLogic X2 - 2 和 T3-1B概述
- spring学习(33):id和name
- Qt:Windows编程—代码注入
- 开源 免费 java CMS - FreeCMS1.5-数据对象-job
- 【转载】.NET设计模式之抽象工厂模式(Abstract Factory)
- 【293天】我爱刷题系列052(2017.11.25)
- linux汇编section标签,Linux内核中常用的汇编
- js模拟鼠标自动滑动滑块--dispatchEvent
- CS5532 HAL库版本工程代码
- 机器人手眼标定Ax=xB(eye to hand和eye in hand)及平面九点法标定
- linux之scp命令学习
热门文章
- Graphite在centeros 6下安装
- #100天计划# 2013年10月1日
- Lua笔记6 编译、执行与错误
- TreeView控件结合js树形选择 .
- 蓝桥杯: 基础练习 数列排序
- wdatepicker设置时间范围_Mac新手必看,这些设置可以让你的Mac更好用!
- linux 安装 tao环境,linux环境安装hbase------不一定需要hadoop
- 如何知道现在是否单用户模式_新手运营Shopee现在是否来得及,商品的转化如何提高?...
- indesign排版标点挤压_我於\LaTeX 中文直排实践中所感受的排版需求
- python tornado websocket_python tornado websocket 多聊天室(返回消息给部分连接者)