当前位置:首页 > 技术分析 > 正文内容

PHP使用mongo-php-library操作MongoDB数据库的方法

ruisui882周前 (04-15)技术分析12

1. 介绍

1.1 介绍

福哥今天带着大家学习一下使用PHP操作MongoDB数据库的方法,虽然我们的TFLinux早就安装了MongoDB数据库了,但是还没有应用用到MongoDB数据库,福哥打算先给TFPHP框架增加操作MongoDB数据库的支持。

PHP操作MongoDB数据库有两个库,最早直接使用mongo扩展就可以操作MongoDB了,但是最新版本的MongoDB使用mongo扩展驱动不起来;另外一个就是mongodb扩展,这个mongodb扩展可以驱动最新版本的MongoDB数据库,但是需要借助一个官方的驱动库实现对MongoDB的操作,这个库就是mongo-php-library。

2. 安装

2.1 安装

MongoDB官方的PHP驱动库可以从github上面获取,地址如下:

https://github.com/mongodb/mongo-php-library

2.2 解压缩

下载完mongo-php-library-master.zip解开它,可以得到如下的内容。

3. 使用

3.1 自动加载

因为MongoDB的驱动库是一套PHP代码,所以如果要使用里面众多的对象需要建立一个自动加载的机制,这里面福哥使用的是PHP的spl_autoload_register函数实现对象的自动加载的,代码如下:

include_once (FRAMEWORK_ROOT_PATH . "Extends/Driver/MongoDB/functions.php");

function MongoDB_Autoload(string $class):bool {
    if(substr($class,0,8) == "MongoDB\\") {
        $classPath = FRAMEWORK_ROOT_PATH . "Extends/Driver/" . str_replace("\\", "/", $class) . ".php";
        if (file_exists($classPath)) {
            include_once($classPath);

            return true;
        }
    }

    return false;
}

spl_autoload_register("MongoDB_Autoload");

使用这个自动加载非常简单,只要包含这个PHP程序文件即可。

include_once (FRAMEWORK_ROOT_PATH . "Extends/Driver/MongoDB_Autoload.inc.php");

3.2 连接

首先我们来编写连接MongoDB数据库的代码,利用MongoDB\Client对象。

$client = new \MongoDB\Client("mongodb://root:abcdef@localhost:27017/admin");

初始化Client并不会触发异常,因为此时驱动不会真的去连接MongoDB数据库的。

3.3 查看数据库列表

可以使用Client::listDatabases方法获取数据库列表,当然连接账号也得有这个权限才行。

$client = new \MongoDB\Client("mongodb://root:abcdef@localhost:27017/admin");

$dbs = $client->listDatabases();
print_r($dbs);

3.4 查看数据表列表

可以使用Database::listCollections方法获取集合对象数组,或者使用Database::listCollectionNames方法获取集合名称数组。

为了测试发布,福哥先建立了两个集合a和b。

$client = new \MongoDB\Client("mongodb://root:abcdef@localhost:27017/admin");

// 选择数据库
$db = $client->selectDatabase("test");

// 测试查看集合列表
$collections = array();
foreach ($db->listCollections() as $collection){
    $collections[] = $collection->getName();
}
print_r($collections);

$collectionNames = array();
foreach ($db->listCollectionNames() as $collectionName){
    $collectionNames[] = $collectionName;
}
print_r($collectionNames);

3.5 插入数据

3.5.1 选择集合

插入新记录需要通过Collection对象,要得到Collection对象可以通过Client::selectCollection方法获取,也可以通过Database::selectCollection方法获取。

$client = new \MongoDB\Client("mongodb://root:abcdef@localhost:27017/admin");

// 选择数据库
$db = $client->selectDatabase("test");

$collectionA = $client->selectCollection("test", "a");
$collectionB = $db->selectCollection("b");

3.5.2 插入单行数据

插入单行数据通过Collection::insertOne方法,传入一个数组参数即可。

$client = new \MongoDB\Client("mongodb://root:abcdef@localhost:27017/admin");

// 选择数据库
$db = $client->selectDatabase("test");

// 插入数据
$collection = $db->selectCollection("a");
$collection->insertOne(array(
    "id"=>35,
    "name"=>"福哥",
    "lang"=>"PHP"
));

3.5.3 插入多行数据

插入多行数据通过Collection::insertMany方法,传入一个二维的数组参数,每一个子元素都是一行数据。

$client = new \MongoDB\Client("mongodb://root:abcdef@localhost:27017/admin");

// 选择数据库
$db = $client->selectDatabase("test");

// 插入数据
$collection = $db->selectCollection("a");
$collection->insertMany(array(
    array(
        "id"=>35,
        "name"=>"福哥",
        "lang"=>"C/C++"
    ),
    array(
        "id"=>35,
        "name"=>"福哥",
        "lang"=>"Java"
    ),
    array(
        "id"=>35,
        "name"=>"福哥",
        "lang"=>"Python"
    ),
));

3.6 更新数据

更新数据需要知道记录ID,福哥通过终端把前面插入的数据列表查询出来了,下面讲解更新数据的时候会用到。

3.6.1 更新单行数据

更新单行数据通过Collection::updateOne方法,使用“$set”关键字进行更新。

$client = new \MongoDB\Client("mongodb://root:abcdef@localhost:27017/admin");

// 选择数据库
$db = $client->selectDatabase("test");

// 更新数据
$collection = $db->selectCollection("a");
$collection->updateOne(
    array(
        "_id"=>new \MongoDB\BSON\ObjectId("60a60b0f25fc35405c6994d4")
    ),
    array(
        '$set'=>array(
            "lang"=>"PHP7.4"
        )
    )
);

3.6.2 更新多行数据

更新多行数据通过Collection::updateMany方法,使用“$set”关键字进行更新。

$client = new \MongoDB\Client("mongodb://root:abcdef@localhost:27017/admin");

// 选择数据库
$db = $client->selectDatabase("test");

// 更新数据
$collection = $db->selectCollection("a");
$collection->updateMany(
    array(
        "id"=>35
    ),
    array(
        '$set'=>array(
            "lang"=>"PHP, C/C++, Java, Python"
        )
    )
);

3.7 删除数据

3.7.1 删除单行数据

删除单行数据通过Collection::deleteOne方法实现。

$client = new \MongoDB\Client("mongodb://root:abcdef@localhost:27017/admin");

// 选择数据库
$db = $client->selectDatabase("test");

// 删除数据
$collection = $db->selectCollection("a");
$collection->deleteOne(
    array(
        "_id"=>new \MongoDB\BSON\ObjectId("60a60b0f25fc35405c6994d4")
    )
);

3.7.2 删除多行数据

删除多行数据通过Collection::deleteMany方法实现。

$client = new \MongoDB\Client("mongodb://root:abcdef@localhost:27017/admin");

// 选择数据库
$db = $client->selectDatabase("test");

// 删除数据
$collection = $db->selectCollection("a");
$collection->deleteMany(
    array(
        "id"=>35
    )
);

3.8 查询数据

前面测试删除数据功能已经把数据全部删除了,福哥有重新插入了几条数据以供后面测试查询数据功能使用。

3.8.1 查询单行数据

查询单行数据通过Collection::findOne方法实现。

$client = new \MongoDB\Client("mongodb://root:abcdef@localhost:27017/admin");

// 选择数据库
$db = $client->selectDatabase("test");

// 查询数据
$collection = $db->selectCollection("a");
$row = $collection->findOne(
    array(
        "_id"=>new \MongoDB\BSON\ObjectId("60a611163066e505be4e08ae")
    )
);
print_r($row);

3.8.2 查询多行数据

查询多行数据通过Collection::find方法实现。

$client = new \MongoDB\Client("mongodb://root:abcdef@localhost:27017/admin");

// 选择数据库
$db = $client->selectDatabase("test");

// 查询数据
$collection = $db->selectCollection("a");
$cursor = $collection->find(
    array(
        "id"=>35
    )
);
foreach ($cursor as $row) {
    print_r($row);
}

4. 总结

今天福哥带着童鞋们系统地学习了mongo-php-library驱动库的使用方法,mongo-php-library驱动库是官方提供的用来操作MongoDB数据库的专用库。

mongo-php-library驱动库的功能非常强大,我们今后会逐步将这些功能讲解给大家,敬请期待~~


https://m.tongfu.net/home/35/blog/513315.html

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3474.html

分享给朋友:

“PHP使用mongo-php-library操作MongoDB数据库的方法” 的相关文章

「图解」父子组件通过 props 进行数据交互的方法

1.组件化开发,经常有这样的一个场景,就是父组件通过 Ajax 获取数据,传递给子组件,如何通过 props 进行数据交互来实现,便是本图解的重点。2.代码的结构3.具体代码 ①在父组件 data 中存放数据 ms。 ②将父组件 data 中的数据 ms 绑定到子组件中的属性 ms。 ③子组件在 p...

高效使用 Vim 编辑器的 10 个技巧

在 Reverb,我们使用 MacVim 来标准化开发环境,使配对更容易,并提高效率。当我开始使用 Reverb 时,我以前从未使用过 Vim。我花了几个星期才开始感到舒服,但如果没有这样的提示,可能需要几个月的时间。这里有十个技巧可以帮助你在学习使用 Vim 时提高效率。1. 通过提高按键重复率来...

HTML5+眼球追踪?黑科技颠覆传统手机体验

今天,iH5工具推出一个新的神秘功能——眼动追踪,可以通过摄像头捕捉观众眼球活动!为了给大家具体演示该功能的使用,我做了一个案例,供大家参考。实际效果如下:案例比较简单,就是通过眼动功能获取视觉焦点位置,剔除用户看中的牌。现在,舞台的属性中多了一个“启用眼动”的选项,另外,还多了一个“启用摄像头”的...

2024最新版:前端性能优化方案汇总

前端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~Hello,大家好,我是 Sunday。前端性能优化一直是很多同学非常关注的问题,在日常的面试中也是经常会被问到的点。所以今天咱们就花一点时间来了解一下2024最新的...

学前端,这30个CSS选择器,你必须熟记

你学会了基本的id,class类选择器和descendant后代选择器,然后就觉得完事了吗?如果这样,你就会错过许多灵活运用CSS的机会。虽然本文提到的许多选择器都属于CSS3,并且只能在现代的浏览器中使用,但学会这些是大有好处的。什么是CSS选择器呢?每一条css样式定义由两部分组成,形式如下:[...

Vue真是太好了 壹万多字的Vue知识点 超详细!

1??、Vue和其他两大框架的区别Angular 学习成本太高React 代码可读性差Vue 学习成本较低 很容易上手VUE官方: https://cn.vuejs.org/v2/guide/comparison.html?2??、Vue是什么Vue是一套用于构建用户界面的渐进式框架 "前端...