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 捕获

转载于:https://www.cnblogs.com/dapianzi/p/9264285.html

PHP7 - MongoDB Driver 使用心得相关推荐

  1. PHP7 MongoDB 安装与使用

    PHP7 Mongdb 扩展安装 我们使用 pecl 命令来安装: $ /usr/local/php7/bin/pecl install mongodb 执行成功后,会输出以下结果: -- Build ...

  2. MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集

    MongoDB复制集(Replica Set)通过存储多份数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用.但需要注意的时,连接副本集的姿势如果不对,服务高可用将不复存在. 使用复 ...

  3. 万万没想到,一个 MongoDB.Driver 的 bug 导致 .NET5 程序死锁!

    一:背景 1. 讲故事 这个月初,星球里的一位朋友找到我,说他的程序出现了死锁,怀疑是自己的某些写法导致mongodb出现了如此尴尬的情况,截图如下: 说实话,看过这么多dump,还是第一次遇到真实的 ...

  4. Php7 mongodb explain,【代码片-1】 php7 mongoDB 简单封装

    /** * mongoDB 简单 封装 * 注意:支持 mongoDB 3.2+ * * @author color_wind */ finalclassm_mgdb { privatestatic$ ...

  5. MongoDB Driver:使用正确的姿势连接复制集

    MongoDB复制集(Replica Set)通过存储多份数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用.但需要注意的时,连接副本集的姿势如果不对,服务高可用将不复存在. 使用复 ...

  6. linux php7 mongodb,CentOS 7下安装配置PHP7跟LAMP及MongoDB和Redis

    CentOS 7下安装配置PHP7跟LAMP及MongoDB和Redis 我是想能yum就yum,所有软件的版本一直会升级,注意自己当时的版本是不是已经更新了. 首先装CentOS 7 装好cento ...

  7. php7 mongodb 分组 排序 查询

    $manager = new Manager('mongodb://ip:sort');$param = ['aggregate' => 'collection名称','pipeline' =& ...

  8. .NET MongoDB Driver 2.2使用示例

    说明:mongoDBService是对各种常用操作的封装 public class MongoDBService {#region 变量/// <summary>/// 缓存/// < ...

  9. php7.1安装mysqli扩展,centos php7 安装mysqli扩展心得

    在新配服务器时发现,php无法连接到mysql.通过phpinfo发现.根本没有显示mysqli的相关配置.经过一系列研究.总结了下.: 第一步: 在phpinfo里没有mysqli配置,原因是安装p ...

最新文章

  1. 新趋势:工具赋能企业数字化转型,驱动组织升级!
  2. RHEL7 单独安装图形 X11
  3. HDU 4712 Hamming Distance(随机算法)
  4. emacs 安装auto-complete
  5. python Day6 面向对象学习
  6. html中小于和大于怎么判断,html – CSS nth-child大于和小于
  7. MMC 不能打开文件
  8. java字节码常量池_java字节码常量池处理说明
  9. 多CPU,多核,多进程,多线程以及进程和线程的简单理解以及区别
  10. Oracle 中间件云服务器系统 ExaLogic X2 - 2 和 T3-1B概述
  11. spring学习(33):id和name
  12. Qt:Windows编程—代码注入
  13. 开源 免费 java CMS - FreeCMS1.5-数据对象-job
  14. 【转载】.NET设计模式之抽象工厂模式(Abstract Factory)
  15. 【293天】我爱刷题系列052(2017.11.25)
  16. linux汇编section标签,Linux内核中常用的汇编
  17. js模拟鼠标自动滑动滑块--dispatchEvent
  18. CS5532 HAL库版本工程代码
  19. 机器人手眼标定Ax=xB(eye to hand和eye in hand)及平面九点法标定
  20. linux之scp命令学习

热门文章

  1. Graphite在centeros 6下安装
  2. #100天计划# 2013年10月1日
  3. Lua笔记6 编译、执行与错误
  4. TreeView控件结合js树形选择 .
  5. 蓝桥杯: 基础练习 数列排序
  6. wdatepicker设置时间范围_Mac新手必看,这些设置可以让你的Mac更好用!
  7. linux 安装 tao环境,linux环境安装hbase------不一定需要hadoop
  8. 如何知道现在是否单用户模式_新手运营Shopee现在是否来得及,商品的转化如何提高?...
  9. indesign排版标点挤压_我於\LaTeX 中文直排实践中所感受的排版需求
  10. python tornado websocket_python tornado websocket 多聊天室(返回消息给部分连接者)