本文档提供了使用 @nestjs/mongoose 包将 MongoDB 与 NestJS 应用程序集成的全面指南。Mongoose 是一个对象文档映射 (ODM) 库,它提供了一种基于模式的解决方案来为 MongoDB 建模应用程序数据。此集成使您能够以类型安全的方式处理 MongoDB,同时利用 NestJS 的模块化架构和依赖注入系统。
该 @nestjs/mongoose 包作为 NestJS 和 MongoDB 之间的桥梁,提供装饰器和实用程序,可以在保持类型安全的同时简化数据库操作。
来源:package.json、sample/06-mongoose/package.json、sample/14-mongoose-base/package.json
要开始在 NestJS 中使用 Mongoose,您需要安装所需的包
NestJS 中使用的 @nestjs/mongoose 的当前版本为 11.0.3,与 mongoose 8.13.2 兼容,如示例项目中所示。
来源:package.json:99-100、sample/06-mongoose/package.json:22-26
要连接到 MongoDB,您需要将 MongooseModule 导入到应用程序的根模块中。
配置 MongoDB 连接主要有两种方式
forRoot() 进行基本配置forRootAsync() 进行异步配置以实现动态配置来源:sample/06-mongoose/package.json、integration/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 来验证传入数据并定义 API 有效负载的形状
为 MongoDB 操作实现适当的错误处理
为列表端点实现分页
该 @nestjs/mongoose 包通过 Mongoose 在 NestJS 和 MongoDB 之间提供了无缝集成。通过利用 NestJS 强大的依赖注入系统和 Mongoose 基于模式的建模,您可以构建健壮、可维护且类型安全的基于 MongoDB 的应用程序。
对于复杂的数据库交互,可以考虑探索 Mongoose 完全支持的 MongoDB 聚合管道。此外,在处理大型应用程序时,实现适当的索引策略和查询优化将确保您的应用程序保持高性能。
来源:package.json:99-100、sample/06-mongoose/package.json、integration/docker-compose.yml:36-42