菜单

Mongoose 集成

相关源文件

本文档提供了使用 @nestjs/mongoose 包将 MongoDB 与 NestJS 应用程序集成的全面指南。Mongoose 是一个对象文档映射 (ODM) 库,它提供了一种基于模式的解决方案来为 MongoDB 建模应用程序数据。此集成使您能够以类型安全的方式处理 MongoDB,同时利用 NestJS 的模块化架构和依赖注入系统。

概述

@nestjs/mongoose 包作为 NestJS 和 MongoDB 之间的桥梁,提供装饰器和实用程序,可以在保持类型安全的同时简化数据库操作。

来源:package.jsonsample/06-mongoose/package.jsonsample/14-mongoose-base/package.json

安装与设置

要开始在 NestJS 中使用 Mongoose,您需要安装所需的包

NestJS 中使用的 @nestjs/mongoose 的当前版本为 11.0.3,与 mongoose 8.13.2 兼容,如示例项目中所示。

来源:package.json:99-100sample/06-mongoose/package.json:22-26

模块配置

连接到 MongoDB

要连接到 MongoDB,您需要将 MongooseModule 导入到应用程序的根模块中。

配置 MongoDB 连接主要有两种方式

  1. 使用 forRoot() 进行基本配置
  1. 使用 forRootAsync() 进行异步配置以实现动态配置

来源:sample/06-mongoose/package.jsonintegration/docker-compose.yml:36-42

模式定义

Mongoose 使用模式来定义文档的结构。NestJS 为使用装饰器定义模式提供了一种基于类的​​方法,该方法与 TypeScript 的类型系统无缝集成。

使用装饰器

使用装饰器定义模式的示例

模式选项

您可以在 @Schema() 装饰器中提供模式选项

注册模型

为了使您的模型可注入,请在相应的模块中注册它们

来源:sample/06-mongoose/package.json

注入和使用模型

注册模型后,您可以使用 @InjectModel() 装饰器将它们注入到您的服务中

在服务中使用模型的示例

来源:sample/06-mongoose/package.json

钩子和中间件

Mongoose 提供了钩子(中间件),允许您在某些操作之前或之后执行代码。这些可以添加到您的模式中

事务

Mongoose 支持事务,用于需要原子性的多文档操作

高级特性

子文档

Mongoose 支持嵌套文档结构

关系

您可以使用引用在文档之间定义关系

填充

要获取引用的文档,您可以使用 Mongoose 的 populate 方法

存储库模式

虽然您可以直接使用 Mongoose 模型,但实现存储库模式可以提供额外的抽象层

示例存储库实现

测试

在测试使用 Mongoose 模型的组件时,您可以创建一个 mock 模块

常见模式和最佳实践

数据传输对象 (DTO)

使用 DTO 来验证传入数据并定义 API 有效负载的形状

错误处理

为 MongoDB 操作实现适当的错误处理

分页

为列表端点实现分页

结论

@nestjs/mongoose 包通过 Mongoose 在 NestJS 和 MongoDB 之间提供了无缝集成。通过利用 NestJS 强大的依赖注入系统和 Mongoose 基于模式的建模,您可以构建健壮、可维护且类型安全的基于 MongoDB 的应用程序。

对于复杂的数据库交互,可以考虑探索 Mongoose 完全支持的 MongoDB 聚合管道。此外,在处理大型应用程序时,实现适当的索引策略和查询优化将确保您的应用程序保持高性能。

来源:package.json:99-100sample/06-mongoose/package.jsonintegration/docker-compose.yml:36-42