跳转至内容

MongoDB

简介

MongoDB 是最受欢迎的 NoSQL 文档型数据库之一,因其高写入负载(适用于分析或物联网场景)和高可用性(易于设置带有自动故障转移的副本集)而备受青睐。它还可以轻松对数据库进行分片以实现水平扩展,并拥有强大的查询语言,用于执行聚合、文本搜索或地理空间查询。

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

在 Laravel 中使用 MongoDB 之前,我们建议通过 Composer 安装并使用 mongodb/laravel-mongodb 扩展包。laravel-mongodb 扩展包由 MongoDB 官方维护。虽然 PHP 通过 MongoDB 驱动程序原生支持 MongoDB,但 Laravel MongoDB 扩展包提供了与 Eloquent 和其他 Laravel 特性更深入的集成。

1composer require mongodb/laravel-mongodb

安装

MongoDB 驱动程序

要连接 MongoDB 数据库,需要安装 mongodb PHP 扩展。如果你使用 Laravel Herd 进行本地开发,或者通过 php.new 安装了 PHP,那么你的系统上已经安装了该扩展。如果需要手动安装,可以通过 PECL 进行安装。

1pecl install mongodb

有关安装 MongoDB PHP 扩展的更多信息,请查看 MongoDB PHP 扩展安装指南

启动 MongoDB 服务器

MongoDB Community Server 可用于在本地运行 MongoDB,并可在 Windows、macOS、Linux 上安装,或作为 Docker 容器运行。要了解如何安装 MongoDB,请参考 MongoDB 官方社区安装指南

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

1MONGODB_URI="mongodb://:27017"
2MONGODB_DATABASE="laravel_app"

如需在云端托管 MongoDB,请考虑使用 MongoDB Atlas。要从你的应用程序在本地访问 MongoDB Atlas 集群,你需要将你的 IP 地址添加到集群网络设置的项目 IP 访问列表中。

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

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

安装 Laravel MongoDB 扩展包

最后,使用 Composer 安装 Laravel MongoDB 扩展包。

1composer require mongodb/laravel-mongodb

如果未安装 mongodb PHP 扩展,扩展包的安装将会失败。CLI(命令行)和 Web 服务器之间的 PHP 配置可能有所不同,请确保扩展在两种配置中均已启用。

配置

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

1'connections' => [
2 'mongodb' => [
3 'driver' => 'mongodb',
4 'dsn' => env('MONGODB_URI', 'mongodb://:27017'),
5 'database' => env('MONGODB_DATABASE', 'laravel_app'),
6 ],
7],

特性

配置完成后,你可以在应用程序中使用 mongodb 扩展包和数据库连接,以利用其各种强大的功能。

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

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