MongoDB
简介
MongoDB 是最流行的 NoSQL 面向文档数据库之一,因其高写入负载(适合分析或 IoT)与高可用性(易于配置带自动故障转移的副本集)而被广泛使用。它也便于对数据库进行分片以实现横向扩展,并提供强大的查询语言,可用于聚合、全文搜索或地理空间查询。
与 SQL 数据库将数据存储在行列表格中不同,MongoDB 数据库中的每条记录都是用 BSON(数据的二进制表示)描述的文档。应用随后可以 JSON 格式检索这些信息。它支持多种数据类型,包括文档、数组、嵌入文档和二进制数据。
在 Laravel 中使用 MongoDB 之前,建议通过 Composer 安装并使用 mongodb/laravel-mongodb 包。laravel-mongodb 包由 MongoDB 官方维护;虽然 PHP 可通过 MongoDB 驱动原生支持 MongoDB,但 Laravel MongoDB 包能与 Eloquent 及其他 Laravel 特性实现更丰富的集成:
composer require mongodb/laravel-mongodb安装
MongoDB 驱动
要连接 MongoDB 数据库,需要 mongodb PHP 扩展。若你在本地使用 Laravel Herd 开发,或通过 php.new 安装了 PHP,系统上通常已安装该扩展。若需手动安装,可通过 PECL 进行:
pecl install mongodb关于安装 MongoDB PHP 扩展的更多信息,请参阅 MongoDB PHP 扩展安装说明。
启动 MongoDB 服务器
MongoDB Community Server 可用于在本地运行 MongoDB,可安装在 Windows、macOS、Linux 上,或以 Docker 容器方式运行。安装方法请参阅 官方 MongoDB Community 安装指南。
MongoDB 服务器的连接字符串可在 .env 文件中设置:
MONGODB_URI="mongodb://localhost:27017"
MONGODB_DATABASE="laravel_app"若要在云端托管 MongoDB,可考虑使用 MongoDB Atlas。要从本地应用访问 MongoDB Atlas 集群,需要在集群的网络设置中将本机 IP 地址加入项目的 IP 访问列表。
MongoDB Atlas 的连接字符串也可在 .env 文件中设置:
MONGODB_URI="mongodb+srv://<username>:<password>@<cluster>.mongodb.net/<dbname>?retryWrites=true&w=majority"
MONGODB_DATABASE="laravel_app"安装 Laravel MongoDB 包
最后,使用 Composer 安装 Laravel MongoDB 包:
composer require mongodb/laravel-mongodbINFO
若未安装 mongodb PHP 扩展,该包的安装将会失败。CLI 与 Web 服务器的 PHP 配置可能不同,请确保两处配置都已启用该扩展。
配置
你可以通过应用的 config/database.php 配置文件配置 MongoDB 连接。在该文件中添加使用 mongodb 驱动的 mongodb 连接:
'connections' => [
'mongodb' => [
'driver' => 'mongodb',
'dsn' => env('MONGODB_URI', 'mongodb://localhost:27017'),
'database' => env('MONGODB_DATABASE', 'laravel_app'),
],
],功能特性
配置完成后,即可在应用中使用 mongodb 包与数据库连接,以利用多种强大功能:
- [使用 Eloquent](https://www.mongodb.com/docs/drivers/php/laravel-mongodb/current/eloquent-models/),可将模型存储在 MongoDB 集合中。除标准 Eloquent 功能外,Laravel MongoDB 包还提供嵌入式关联等额外能力。该包也可直接访问 MongoDB 驱动,用于执行原始查询与聚合管道等操作。
- 使用查询构建器[编写复杂查询](https://www.mongodb.com/docs/drivers/php/laravel-mongodb/current/query-builder/)。
- 使用向量嵌入与 `vectorSearch` Eloquent 方法进行[相似度 / 向量搜索](https://www.mongodb.com/docs/drivers/php/laravel-mongodb/current/fundamentals/vector-search/)。
- `mongodb` [缓存驱动](https://www.mongodb.com/docs/drivers/php/laravel-mongodb/current/cache/) 经过优化,可利用 TTL 索引等 MongoDB 特性自动清除过期缓存条目。
- 使用 `mongodb` 队列驱动[派发并处理队列任务](https://www.mongodb.com/docs/drivers/php/laravel-mongodb/current/queues/)。
- 通过 [Flysystem 的 GridFS 适配器](https://flysystem.thephpleague.com/docs/adapter/gridfs/)[将文件存储到 GridFS](https://www.mongodb.com/docs/drivers/php/laravel-mongodb/current/filesystems/)。
- 使用 `mongodb` Scout 引擎进行[全文搜索](https://www.mongodb.com/docs/drivers/php/laravel-mongodb/current/scout/)。
- 大多数使用数据库连接或 Eloquent 的第三方包均可与 MongoDB 一起使用。
要继续学习如何使用 MongoDB 与 Laravel,请参阅 MongoDB 的快速入门指南。