NestJS服务中如何注入并使用多个Mongoose数据模型
NestJS 模块内多Mongoose模型注入实现方案
完全支持在单模块及其下属服务中访问、注入多个Mongoose模型,按你需要用到的模型来源,对应操作即可:
一、使用当前模块内注册的多模型
如果所有要用到的模型都在当前Auth模块内首次注册,按以下步骤完成配置:
- 在模块的
MongooseModule.forFeature配置数组中,添加所有需要用到的模型与对应Schema的映射关系,和你之前注册User模型的写法完全一致,追加配置项即可。
示例auth.module.ts配置:
@Module({ imports: [ MongooseModule.forFeature([ { name: User.name, schema: UserSchema }, { name: Role.name, schema: RoleSchema }, // 追加角色模型配置 { name: LoginLog.name, schema: LoginLogSchema } // 追加登录日志模型配置 ]), ], controllers: [AuthController], providers: [AuthService], }) export class AuthModule {}
- 在对应服务的构造函数中,使用
@InjectModel(模型名)装饰器挨个声明要注入的模型即可,没有数量限制。
示例auth.service.ts配置:
@Injectable() export class AuthService { constructor( @InjectModel(User.name) private userModel: Model<UserDocument>, @InjectModel(Role.name) private roleModel: Model<RoleDocument>, @InjectModel(LoginLog.name) private loginLogModel: Model<LoginLogDocument> ) {} async getUser(username: string) { const user = await this.userModel.findOne({ name: username }); const roleList = await this.roleModel.find({ userId: user._id }); await this.loginLogModel.create({ userId: user._id, loginAt: new Date() }); return { user, roles: roleList }; } }
二、使用其他模块已注册的模型
如果你要用到的模型已经在其他业务模块中注册过,不需要重复编写Schema配置,按以下步骤即可跨模块引用:
- 在模型所属的原模块中,将注册了对应模型的
MongooseModule加入模块的exports导出数组,暴露模型访问权限。
比如User模型原本在UserModule中注册:
@Module({ imports: [ MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]) ], exports: [MongooseModule] // 导出后其他模块导入UserModule即可使用User模型 }) export class UserModule {}
- 在需要使用该模型的AuthModule中,直接导入对应的原模块,之后就可以在AuthService中按相同的
@InjectModel写法注入模型使用。
@Module({ imports: [ UserModule, // 导入后即可访问UserModule导出的User模型 MongooseModule.forFeature([ { name: Role.name, schema: RoleSchema }, { name: LoginLog.name, schema: LoginLogSchema } ]), ], controllers: [AuthController], providers: [AuthService], }) export class AuthModule {}
注意:只要是要在服务中注入的模型,必须满足两个条件之一:要么在当前模块的
MongooseModule.forFeature中完成注册,要么从其他导出了对应模型配置的模块中导入,否则启动时会抛出依赖注入找不到对应Provider的错误。
内容的提问来源于stack exchange,提问作者vaibhav deep
相关产品推荐
相关产品推荐

