百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

moboyou 2025-08-02 20:11 10 浏览

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

相关推荐

Excel技巧:SHEETSNA函数一键提取所有工作表名称批量生产目录

首先介绍一下此函数:SHEETSNAME函数用于获取工作表的名称,有三个可选参数。语法:=SHEETSNAME([参照区域],[结果方向],[工作表范围])(参照区域,可选。给出参照,只返回参照单元格...

Excel HOUR函数:“小时”提取器_excel+hour函数提取器怎么用

一、函数概述HOUR函数是Excel中用于提取时间值小时部分的日期时间函数,返回0(12:00AM)到23(11:00PM)之间的整数。该函数在时间数据分析、考勤统计、日程安排等场景中应用广泛。语...

Filter+Search信息管理不再难|多条件|模糊查找|Excel函数应用

原创版权所有介绍一个信息管理系统,要求可以实现:多条件、模糊查找,手动输入的内容能去空格。先看效果,如下图动画演示这样的一个效果要怎样实现呢?本文所用函数有Filter和Search。先用filter...

FILTER函数介绍及经典用法12:FILTER+切片器的应用

EXCEL函数技巧:FILTER经典用法12。FILTER+切片器制作筛选按钮。FILTER的函数的经典用法12是用FILTER的函数和切片器制作一个筛选按钮。像左边的原始数据,右边想要制作一...

office办公应用网站推荐_office办公软件大全

以下是针对Office办公应用(Word/Excel/PPT等)的免费学习网站推荐,涵盖官方教程、综合平台及垂直领域资源,适合不同学习需求:一、官方权威资源1.微软Office官方培训...

WPS/Excel职场办公最常用的60个函数大全(含卡片),效率翻倍!

办公最常用的60个函数大全:从入门到精通,效率翻倍!在职场中,WPS/Excel几乎是每个人都离不开的工具,而函数则是其灵魂。掌握常用的函数,不仅能大幅提升工作效率,还能让你在数据处理、报表分析、自动...

收藏|查找神器Xlookup全集|一篇就够|Excel函数|图解教程

原创版权所有全程图解,方便阅读,内容比较多,请先收藏!Xlookup是Vlookup的升级函数,解决了Vlookup的所有缺点,可以完全取代Vlookup,学完本文后你将可以应对所有的查找难题,内容...

批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数

批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数在电商运营、物流对账等工作中,经常需要统计快递“揽收到签收”的耗时——比如判断某快递公司是否符合“3天内送达”的服务承...

Excel函数公式教程(490个实例详解)

Excel函数公式教程(490个实例详解)管理层的财务人员为什么那么厉害?就是因为他们精通excel技能!财务人员在日常工作中,经常会用到Excel财务函数公式,比如财务报表分析、工资核算、库存管理等...

Excel(WPS表格)Tocol函数应用技巧案例解读,建议收藏备用!

工作中,经常需要从多个单元格区域中提取唯一值,如体育赛事报名信息中提取唯一的参赛者信息等,此时如果复制粘贴然后去重,效率就会很低。如果能合理利用Tocol函数,将会极大地提高工作效率。一、功能及语法结...

Excel中的SCAN函数公式,把计算过程理清,你就会了

Excel新版本里面,除了出现非常好用的xlookup,Filter公式之外,还更新一批自定义函数,可以像写代码一样写公式其中SCAN函数公式,也非常强大,它是一个循环函数,今天来了解这个函数公式的计...

Excel(WPS表格)中多列去重就用Tocol+Unique组合函数,简单高效

在数据的分析和处理中,“去重”一直是绕不开的话题,如果单列去重,可以使用Unique函数完成,如果多列去重,如下图:从数据信息中可以看到,每位参赛者参加了多项运动,如果想知道去重后的参赛者有多少人,该...

Excel(WPS表格)函数Groupby,聚合统计,快速提高效率!

在前期的内容中,我们讲了很多的统计函数,如Sum系列、Average系列、Count系列、Rank系列等等……但如果用一个函数实现类似数据透视表的功能,就必须用Groupby函数,按指定字段进行聚合汇...

Excel新版本,IFS函数公式,太强大了!

我们举一个工作实例,现在需要计算业务员的奖励数据,右边是公司的奖励标准:在新版本的函数公式出来之前,我们需要使用IF函数公式来解决1、IF函数公式IF函数公式由三个参数组成,IF(判断条件,对的时候返...

Excel不用函数公式数据透视表,1秒完成多列项目汇总统计

如何将这里的多组数据进行汇总统计?每组数据当中一列是不同菜品,另一列就是该菜品的销售数量。如何进行汇总统计得到所有的菜品销售数量的求和、技术、平均、最大、最小值等数据?不用函数公式和数据透视表,一秒就...