现代 PHP MongoDB 操作指南与实例
在使用 PHP 开发应用时,结合 MongoDB 存储数据是一种常见的架构选择。本文将介绍在现代 PHP 环境中,如何正确安装和使用官方推荐的驱动程序进行数据库操作,并通过具体代码示例展示数据的增、删、改、查流程。
结果或目标
完成在 PHP 项目中对 MongoDB 的连接配置,并实现基础的数据读写功能,包括创建文档、检索匹配记录、更新字段以及移除无用数据。
准备条件
在编写代码之前,需确保环境满足以下条件:
- PHP 版本:推荐使用
PHP 8.0+,以获得更好的性能和安全支持。 - 依赖库:必须安装
mongodb/mongodb包。这是 MongoDB 官方推荐的现代 PHP 驱动程序,替代了已废弃的旧版mongoPECL 扩展。 - 启动 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 后端开发的资料,请持续关注我们本站的其他技术文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













