Skip to content
全部文档

MongoDB

简介

MongoDB 是最流行的 NoSQL 面向文档数据库之一,因其高写入负载(适合分析或 IoT)与高可用性(易于配置带自动故障转移的副本集)而被广泛使用。它也便于对数据库进行分片以实现横向扩展,并提供强大的查询语言,可用于聚合、全文搜索或地理空间查询。

与 SQL 数据库将数据存储在行列表格中不同,MongoDB 数据库中的每条记录都是用 BSON(数据的二进制表示)描述的文档。应用随后可以 JSON 格式检索这些信息。它支持多种数据类型,包括文档、数组、嵌入文档和二进制数据。

在 Laravel 中使用 MongoDB 之前,建议通过 Composer 安装并使用 mongodb/laravel-mongodb 包。laravel-mongodb 包由 MongoDB 官方维护;虽然 PHP 可通过 MongoDB 驱动原生支持 MongoDB,但 Laravel MongoDB 包能与 Eloquent 及其他 Laravel 特性实现更丰富的集成:

shell
composer require mongodb/laravel-mongodb

安装

MongoDB 驱动

要连接 MongoDB 数据库,需要 mongodb PHP 扩展。若你在本地使用 Laravel Herd 开发,或通过 php.new 安装了 PHP,系统上通常已安装该扩展。若需手动安装,可通过 PECL 进行:

shell
pecl install mongodb

关于安装 MongoDB PHP 扩展的更多信息,请参阅 MongoDB PHP 扩展安装说明

启动 MongoDB 服务器

MongoDB Community Server 可用于在本地运行 MongoDB,可安装在 Windows、macOS、Linux 上,或以 Docker 容器方式运行。安装方法请参阅 官方 MongoDB Community 安装指南

MongoDB 服务器的连接字符串可在 .env 文件中设置:

ini
MONGODB_URI="mongodb://localhost:27017"
MONGODB_DATABASE="laravel_app"

若要在云端托管 MongoDB,可考虑使用 MongoDB Atlas。要从本地应用访问 MongoDB Atlas 集群,需要在集群的网络设置中将本机 IP 地址加入项目的 IP 访问列表

MongoDB Atlas 的连接字符串也可在 .env 文件中设置:

ini
MONGODB_URI="mongodb+srv://<username>:<password>@<cluster>.mongodb.net/<dbname>?retryWrites=true&w=majority"
MONGODB_DATABASE="laravel_app"

安装 Laravel MongoDB 包

最后,使用 Composer 安装 Laravel MongoDB 包:

shell
composer require mongodb/laravel-mongodb

INFO

若未安装 mongodb PHP 扩展,该包的安装将会失败。CLI 与 Web 服务器的 PHP 配置可能不同,请确保两处配置都已启用该扩展。

配置

你可以通过应用的 config/database.php 配置文件配置 MongoDB 连接。在该文件中添加使用 mongodb 驱动的 mongodb 连接:

php
'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/)。
  • `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/)。
  • 大多数使用数据库连接或 Eloquent 的第三方包均可与 MongoDB 一起使用。

要继续学习如何使用 MongoDB 与 Laravel,请参阅 MongoDB 的快速入门指南