Lzh on GitHub

介绍

MongoDB 是最流行的 NoSQL 面向文档的数据库之一,以其高写入负载(适用于分析或物联网场景)和高可用性(可轻松设置带自动故障转移的副本集)而闻名。它还可以轻松实现数据库分片以进行水平扩展,并提供强大的查询语言,用于聚合、文本搜索或地理空间查询。

与 SQL 数据库按行或列存储数据不同,MongoDB 数据库中的每条记录都是一个文档,以 BSON(二进制 JSON)格式表示。应用程序可以以 JSON 格式检索这些信息。MongoDB 支持多种数据类型,包括文档、数组、嵌入式文档以及二进制数据。

在 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 社区版服务器可用于在本地运行 MongoDB,可在 Windows、macOS、Linux 上安装,或以 Docker 容器的形式运行。有关安装 MongoDB 的详细步骤,请参考官方 MongoDB 社区安装指南。

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-mongodb

如果系统未安装 mongodb PHP 扩展包,则安装将会失败。请注意,PHP 在命令行(CLI)和 Web 服务器下的配置可能不同,因此请确保在两种环境下都启用了该扩展。

配置

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

'connections' => [
    'mongodb' => [
        'driver' => 'mongodb',
        'dsn' => env('MONGODB_URI', 'mongodb://localhost:27017'),
        'database' => env('MONGODB_DATABASE', 'laravel_app'),
    ],
],

功能

配置完成后,你可以在应用程序中使用 mongodb 包和数据库连接,从而充分利用一系列强大的功能:

  • 使用 Eloquent 时,模型可以存储在 MongoDB 集合中。除了标准的 Eloquent 功能外,Laravel MongoDB 包还提供了嵌入式关联等额外特性。该包还提供了对 MongoDB 驱动的直接访问,可用于执行原生查询和聚合管道等操作。
  • 使用查询构建器编写复杂查询。
  • mongodb 缓存驱动经过优化,可利用 MongoDB 特性(如 TTL 索引)自动清理过期缓存条目。
  • 使用 mongodb 队列驱动分发和处理队列任务。
  • 通过 Flysystem 的 GridFS 适配器存储文件。
  • 大多数依赖数据库连接或 Eloquent 的第三方包都可以与 MongoDB 一起使用。

如需进一步学习如何在 Laravel 中使用 MongoDB,请参考 MongoDB 的快速入门指南。