NestJS如何为不同连接复用相同的Schema与Collection?
解决NestJS中不同MongoDB连接下同名Model的注入问题
你遇到的核心问题是:注入Model时没有指定对应的连接名称,导致NestJS默认复用了同一个连接实例,自然区分不开两个模型。
要解决这个问题,只需要在@InjectModel()装饰器中添加第二个参数,明确指定该模型所属的连接名称——也就是你在MongooseModule.forFeature()里传入的第二个参数("main"和"slave")。
具体实现代码
修改你的SomeService注入代码如下:
import { Injectable } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { Model } from 'mongoose'; import { AbcDocument } from './path-to-your-abc-document'; @Injectable() export class SomeService { // 注入main连接对应的ABC模型 constructor( @InjectModel('ABC', 'main') private readonly abcMainModel: Model<AbcDocument>, // 注入slave连接对应的ABC模型 @InjectModel('ABC', 'slave') private readonly abcSlaveModel: Model<AbcDocument>, ) {} // 示例:分别使用两个连接的模型操作数据 async fetchMainDbData() { return this.abcMainModel.find().exec(); } async fetchSlaveDbData() { return this.abcSlaveModel.find().exec(); } }
关键说明
@InjectModel('模型名称', '连接名称')的第二个参数必须和你在SomeModule中MongooseModule.forFeature()传入的连接名称完全匹配,这样NestJS才能精准找到对应连接下的模型实例。- 由于你两个连接指向的集合名称相同、Schema结构也一致,这样注入后,两个模型会分别绑定到
main和slave连接,操作的是对应数据库的同名字段集合,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Michał Skorzec
相关产品推荐
相关产品推荐

