跳转到主要内容

简介

MongoDB 是最流行的 NoSQL 文档数据库之一。它具备高写入性能(非常适合分析和 IoT)、高可用(通过副本集实现自动故障转移)、水平扩展(分片)以及强大的查询语言(聚合、全文搜索、地理空间查询)。 不同于 SQL 数据库的行 / 列结构,MongoDB 的每一条记录都是 BSON(二进制 JSON)文档。应用中可以以 JSON 的形式读取这些数据。
在 Laravel 中使用 MongoDB 时推荐使用由 MongoDB 官方维护的 mongodb/laravel-mongodb 扩展包。它与 Eloquent 及 Laravel 的各类功能有深度集成。

安装

MongoDB PHP 驱动

连接 MongoDB 需要 mongodb PHP 扩展。使用 Laravel Herdphp.new 时已预装。要手动安装可以使用 PECL。
安装细节请参考 MongoDB PHP 扩展安装指南
请确保 mongodb PHP 扩展在 CLI 和 Web 服务器两端都已启用,两处的配置可能不同。

启动 MongoDB 服务器

本地开发可以使用 MongoDB Community Server。Windows、macOS、Linux、Docker 上的安装方法请参考官方安装指南 使用 Docker:
在云端托管可以使用 MongoDB Atlas。从本地访问 Atlas 集群时,需要把你的 IP 加入项目的 IP 允许列表。

安装 laravel-mongodb 扩展包

使用 Composer 安装 mongodb/laravel-mongodb

配置

环境变量

.env 中添加 MongoDB 的连接信息。
使用 MongoDB Atlas 时改为 Atlas 的连接字符串。

config/database.php

config/database.phpconnections 数组中添加 mongodb 连接。
如果同时使用 MySQL 等关系型数据库和 MongoDB,可以保留 default,只增加一个 mongodb 连接,然后按模型切换连接。

主要功能

Eloquent 模型

继承 MongoDB\Laravel\Eloquent\Model 后,你几乎可以像使用普通 Eloquent 模型一样操作 MongoDB。
MongoDB 是无模式的,不需要迁移。保存文档时集合会自动创建。

基本的 CRUD 操作

与普通 Eloquent 一样。

数组与嵌套文档

MongoDB 的数组和嵌套文档也可以直接使用。

查询构造器

MongoDB 的查询构造器可以用来写更复杂的查询。更多细节请参考 laravel-mongodb 查询构造器文档

缓存驱动

MongoDB 缓存驱动使用 TTL 索引自动删除过期条目。更多细节请参考 缓存驱动文档 config/cache.php 中添加一个 store。
.env 中将缓存驱动切换为 MongoDB。

队列驱动

MongoDB 也可以作为队列驱动使用。详情请参考队列驱动文档 config/queue.php 中添加连接。
.env 中把队列连接切到 MongoDB。

使用 GridFS 存储文件

可以借助 MongoDB 的 GridFS 存储文件,通过 Flysystem 的 GridFS 适配器使用。详情请参考 GridFS 文档
config/filesystems.php 中添加磁盘。

向量检索(Vector Search)

通过 MongoDB Atlas Vector Search,可以基于向量嵌入进行相似度检索。将文本、图片、音频等数据向量化后存储,就能查询与目标向量最接近的文档,非常适合 AI / 机器学习场景。
向量检索仅在 MongoDB Atlas 上可用,本地的 MongoDB Community Server 或自托管环境不支持。使用前需要先在 Atlas 控制台创建 Vector Search 索引。
在查询构造器上使用 vectorSearch 方法。

全文检索(Scout 引擎)

mongodb Scout 引擎让你可以在 MongoDB 上使用 Laravel Scout 的全文检索能力。内部基于 MongoDB Atlas Search,支持模糊搜索、通配符等。详情请参考 Scout 引擎文档
MongoDB Scout 引擎同样只在 MongoDB Atlas 上可用。Scout 的索引集合与模型的集合必须使用不同的集合。config/scout.php 中的 prefix(默认是应用名)会自动生效。
.env 中将 Scout 驱动设为 mongodb
在模型上添加 Searchable trait。
创建 Scout 索引并将现有数据导入。
使用标准的 Scout API 进行搜索。

与 MySQL 混用

Laravel 可以同时使用 MySQL 与 MongoDB,通过模型的 $connection 属性指定连接即可。
若要在 MySQL 模型和 MongoDB 模型之间建立关联,请参考混合关联

小结

  1. 通过 pecl install mongodb 安装 PHP 扩展
  2. 启动 MongoDB 服务器(本地、Docker 或 Atlas)
  3. 通过 composer require mongodb/laravel-mongodb 安装扩展包
  4. .env 中配置 MONGODB_URIMONGODB_DATABASE
  5. config/database.php 中添加 mongodb 连接

下一步

laravel-mongodb 官方文档

Eloquent、查询构造器、关联等全部功能的完整参考

快速开始

快速了解 MongoDB 与 Laravel 的基本用法

数据库配置

Laravel 数据库连接配置基础

Eloquent 入门

Eloquent ORM 的基础用法
最后修改于 2026年7月18日

相关主题

搜索