Skip to content

MongoDB

简介

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

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

在将 MongoDB 与 Laravel 一起使用之前,我们建议通过 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,请参阅官方 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

NOTE

如果未安装 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,模型可以存储在 MongoDB 集合中。除了标准的 Eloquent 功能外,Laravel MongoDB 包还提供了嵌入式关联等附加功能。该包还提供对 MongoDB 驱动程序的直接访问,可用于执行原始查询和聚合管道等操作。
  • 使用查询构建器编写复杂查询
  • mongodb 缓存驱动经过优化,可使用 MongoDB 的 TTL 索引等功能自动清除过期的缓存条目。
  • 使用 mongodb 队列驱动分发和处理队列任务
  • 通过 GridFS Adapter for Flysystem 在 GridFS 中存储文件
  • 大多数使用数据库连接或 Eloquent 的第三方包都可以与 MongoDB 一起使用。

要继续了解如何使用 MongoDB 和 Laravel,请参阅 MongoDB 的快速入门指南