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

PHP7 - MongoDB Driver 使用心得的更多相关文章

  1. PHP7 MongoDB 使用方法

    原文链接: http://www.zhaokeli.com/article/8574.html MongoDb原生操作 Mongodb连接 PHP7 连接 MongoDB 语法如下: 复制代码 $ma ...

  2. 落网数据库简单查询接口 caddy+php7+mongodb

    落网数据库简单查询接口 一个简单的DEMO,使用了caddy + php7 + mongodb 数据库&接口设计 来自 https://github.com/Aedron/Luoo.spide ...

  3. MongoDB Driver 简单的CURD

    c#中我们可以使用MongoDB.Driver驱动进行对MongoDB数据库的增删改查. 首先需要在NuGet中安装驱动 安装完毕后会发现会有三个引用 其中 MongoDB.Driver和MongoD ...

  4. c# MongoDB Driver 官方教程翻译

    先贴官方文档地址:http://mongodb.github.io/mongo-csharp-driver/2.5/getting_started/quick_tour/ 安装部分很简单,nuget搜 ...

  5. 基于MongoDB.Driver的扩展

    由于MongoDB.Driver中的Find方法也支持表达式写法,结合[通用查询设计思想]这篇文章中的查询思想,个人基于MongoDB扩展了一些常用的方法. 首先我们从常用的查询开始,由于MongoD ...

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

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

  7. C# mongoDB Driver 使用对象方式查询语法大全

    #region 查询方法 /// <summary> /// 获取单个对象 /// </summary> /// <typeparam name="T" ...

  8. php MongoDB driver 查询实例

    //是否只查mx $mx_on_switch = I("post.mx_on_switch"); //mx模糊查询 $mx_vague_check = I("post.m ...

  9. MongoDB.Driver 2.4以上版本 在.NET中的基本操作

    MongoDB.Driver是操作mongo数据库的驱动,最近2.0以下版本已经从GitHub和Nuget中移除了,也就是说.NET Framework4.0不再能从官方获取到MongoDB的驱动了, ...

随机推荐

  1. java成神之——集合框架之Maps,Hashtable

    集合 Maps HashMap 创建和初始化map 遍历方式 LinkedHashMap WeakHashMap TreeMap 线程锁 Hashtable 结语 集合 Maps HashMap Ma ...

  2. js中,清空对象(删除对象的属性)

    在项目中,有些对象用完后需要重置,下面简单介绍下JS中清除对象的方法.方法如下: 方法一:字面量定义对象 第一步,定义一个空对象并打印出来,代码和效果: 代码: var student = {};co ...

  3. 谈谈contentWindow 和contentDocument以及 iframe

    1,contentWindow:是用来获取子窗口的window对象的,它兼容各大浏览器,用法如下 document.getElementById("iframeId").conte ...

  4. leetcode598

    public class Solution { public int MaxCount(int m, int n, int[,] ops) { ); ); || col == ) { return m ...

  5. 6410裸板程序,led、蜂鸣器、按键…

    //***************************************************************** //作者:昊天 // //功能:在ok6410板子上跑裸板程序, ...

  6. Linux主机名的设置

    Linux主机名的设置 Linux主机名的设置步骤如下: 1.在/etc/sysconfig/network文件中修改HOSTNAME的值为要设置的主机名. HOSTNAME=myhost 2.在/e ...

  7. 数据库与vs的连接

    新建一个MFC基于对话框的项目后,更改属性, 其中需要将include(里面都是MySQL的头文件)lib是库文件,将.dll放入与.exe同级目录下,或放入系统里(c:\windows\system ...

  8. 【codevs2822】爱在心中

    题目描述 Description “每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动.爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home.” 在爱的国度 ...

  9. java用JDBC连接数据库的方式

    //驱动位置String sDBDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";//连接数据库地址名字String ...

  10. javascript使用技巧总结,不断更新...

    1.使用a标签来获得当前页面相对地址的绝对地址 function getAbsoluteUrl(url){ var a; if(!a) a = document.createElement('a'); ...