现代 PHP MongoDB 操作指南与实例

慢慢来
慢慢来
发布时间:2026-10-13| 6人浏览过
原创

在使用 PHP 开发应用时,结合 MongoDB 存储数据是一种常见的架构选择。本文将介绍在现代 PHP 环境中,如何正确安装和使用官方推荐的驱动程序进行数据库操作,并通过具体代码示例展示数据的增、删、改、查流程。

结果或目标

完成在 PHP 项目中对 MongoDB 的连接配置,并实现基础的数据读写功能,包括创建文档、检索匹配记录、更新字段以及移除无用数据。

准备条件

在编写代码之前,需确保环境满足以下条件:

  • PHP 版本:推荐使用 PHP 8.0+,以获得更好的性能和安全支持。
  • 依赖库:必须安装 mongodb/mongodb 包。这是 MongoDB 官方推荐的现代 PHP 驱动程序,替代了已废弃的旧版 mongo PECL 扩展。
  • 启动 Composer:在项目根目录执行以下命令引入驱动:
composer require mongodb/mongodb

注意**:不要使用旧的 new MongoClient() 语法而不配合新命名空间,因为旧版驱动已不再维护,且存在安全隐患与兼容性问题。

真实操作顺序

第1步:建立数据库连接

目的**:初始化客户端对象,建立与 MongoDB 服务器的通信通道。

动作**:使用 MongoDB\Client 类,传入连接字符串(URI)和认证选项。

<?php
require 'vendor/autoload.php';
use MongoDB\Client;

// 替换为你的实际 URI
$uri = "mongodb://localhost:27017";
$client = new Client($uri);
?>

第2步:获取数据库与集合引用

目的**:定位具体的数据存储位置。MongoDB 中“数据库”对应 Database,“表”对应 Collection(集合)。

入口**:$client->selectDatabase('test_db')->

<?php
$database = $client->selectDatabase('my_project_db');
$collection = $database->selectCollection('users');
?>

第3步:插入数据 (Insert)

目的**:向集合中添加一条或多条文档记录。

参数**:需要构造好的关联数组(Associative Array),表示 JSON 文档结构。

<?php
$newUser = [
    'name' => 'Alice',
    'email' => 'alice@example.com',
    'created_at' => new MongoDB\BSON\UTCDateTime(time() * 1000)
];

$result = $collection->insertOne($newUser);
echo "Inserted ID: " . $result->getInsertedId();

// 批量插入多个文档
$usersBatch = [
    ['name' => 'Bob'],
    ['name' => 'Charlie']
];
$insertManyResult = $collection->insertMany($usersBatch);
?>

第4步:查询数据 (Find)

目的**:根据条件检索集合中的文档。

入口**:$collection->find([过滤条件], [投影选项])

重要参数**:

  • sort:排序规则。
  • limit:限制返回数量。
  • skip:跳过前 N 条结果。
<?php
// 查询单条:找到第一个匹配 email 的用户
$foundUser = $collection->findOne(['email' => 'alice@example.com']);
print_r($foundUser);

// 查询多条列表
$filter = ['created_at' => ['$gte' => new MongoDB\BSON\UTCDateTime(1609459200000)]];
$options = [
    'sort'   => ['created_at' => -1], // -1 降序,1 升序
    'limit'  => 10,
];

$cursor = $collection->find($filter, $options);
foreach ($cursor as $user) {
    echo $user['name'] . "\n";
}
?>

第5步:更新数据 (Update)

目的**:修改现有文档的内容。

风险提醒**:更新操作会直接修改磁盘数据,建议先在测试环境中验证筛选条件,避免误删或错改。

动作**:使用 updateOne 或 updateMany,配合 MongoDB 的更新操作符(如 $set)。

<?php
// 将 Alice 的邮箱更新
$updateResult = $collection->updateOne(
    ['name' => 'Alice'],               // 查询条件
    ['$set' => ['email' => 'alice_new@example.com']] // 更新操作:设置新值
);
echo "Matched: " . $updateResult->getMatchedCount() . ", Modified: " . $updateResult->getModifiedCount();

// Upsert:不存在则插入,存在则更新
$upsertResult = $collection->updateOne(
    ['_id' => 'some_specific_id'],
    ['$set' => ['status' => 'active']],
    ['upsert' => true]
);
?>

第6步:删除数据 (Remove)

目的**:从集合中移除文档。

动作**:deleteOne 仅删除第一条匹配项;deleteMany 删除所有匹配项。

<?php
// 删除 Bob
$deleteResult = $collection->deleteOne(['name' => 'Bob']);
echo "Deleted: " . $deleteResult->getDeletedCount() . " document(s).";
?>

简要总结

上述内容是关于在 PHP 8 及以上版本中使用原生 mongodb/mongodb 库进行数据库操作的详细内容。相比早已停更的旧版驱动,新版提供了更清晰的 API、异步支持以及更好的错误处理机制。更多关于高性能 PHP 后端开发的资料,请持续关注我们本站的其他技术文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。