最近的工作和mongodb相关,恶补了各种姿势,踩了了很多坑。
一,分清楚三种 mongodb
1,php5时代的mongodb,标志特征 MongoClient()对象。
示例
$m = new MongoClient(); // 连接默认主机和端口为:mongodb://localhost:27017
$db = $m->test; // 获取名称为 "test" 的集合
$db->selectdb('test'); //查询集合
更多操作 参考网址 https://www.runoob.com/mongodb/mongodb-php.html
如果你还在php5的泥坑,无法超度自己到 php7,就此打住。别往下看了。
2,php7时代的mongodb Driver,这个是原生驱动,标志特征 Manager
php7安装mongodb的扩展后直接 use引入几个关键文件
use MongoDB\Driver\BulkWrite;
use MongoDB\Driver\Manager;
use MongoDB\Driver\Query;
use MongoDB\Driver\Command;
use MongoDB\Driver\WriteConcern;
use MongoDB\BSON\UTCDateTime;
数据库连接
public $manager;
protected function manager()
{
if ($this->manager instanceof Manager) {
return $this->manager;
}
$uri = 'mongodb://'.env('MONGODB_USER').':'.env('MONGODB_PASS').'@'.env('MONGODB_HOST').':'.env('MONGODB_PORT').'/'.env('MONGODB_DB');
return $this->manager = new Manager($uri, []);
}
后面直接使用
$this->manager()->executeBulkWrite();
$this->manager()->executeQuery();
$this->manager()->executeCommand();
这几个方法完成所有的 增删改查 所有操作操作。
优点 高度封装,所有参数都是对象,性能效率也最高。
缺点也很明显。参数复杂,新手很难搞定。
当年mongodb是一心要做大数据工具。对最初版的,php5时代的驱动代码应该是不满意。虽然操作简单,但是是性能平平。
好不容易赶上php7大版本升级,一心要搞大数据高性能的整出了这个,性能优先的驱动。但是步子跨的大了容易扯着DD。
对老版本代码的不兼容也让mongodb始终无法像mysql一样加入到php的原生驱动里面,只能以pcel扩展的形式当备胎。
php5时代的的使用者也是吐槽不满意。
心比天高的mongodb于是只能妥协,又搞了一个 mongodb library;
3, php7下的 mongodb library 类库
安装之前记得安装 mongodb扩展
github地址
https://github.com/mongodb/mongo-php-library
使用composer安装
composer require mongodb/mongodb
安装完成后 项目 vendor目录下新增 mongodb 目录 文件总计4.39MB
使用 ls -lR|grep "^-"|wc -l 命令统计了文件个数(包含子目录)总计827个。
这是闹着玩的呀,都赶上常见的php框架了。这么多文件,性能靠谱吗,这是走火入魔了呀,从一个极端走向另一个极端呀。
这个类库,没有继续深入研究。
总结
从网上搜索 mongodb的使用方法,请一定要自己判断是那一种类型。如果类型不对肯定会出错的。
下一个章我将第二种类型 php7 原生驱动的使用中的详细细节。