如何在不同的NestJS模块中引用Mongoose模型

Der*_*ill 13 mongoose node.js nestjs

我是 NestJS 的新手。我确信这是一个简单的问题,但我就是找不到答案。

Nest 文档中,建议每个模型有一个模块。这涉及使用以下方法创建模型MongooseModule.forFeature

imports: [MongooseModule.forFeature([{ name: 'Cat', schema: CatSchema }])]
Run Code Online (Sandbox Code Playgroud)

文档说:

如果您还想在另一个模块中使用模型,请将 MongooseModule 添加到其他模块的exports部分CatsModule并导入CatsModule

我的问题是如何在新模块中引用模型。

我可以看到:

  1. 如果使用以下命令创建模型,将如何完成此操作mongoose.model('Name', MySchema)
  2. 需要什么出口
  3. 一个暗示这将使用 完成的问题import { Model } from 'mongoose'; @InjectModel('name') myModel: Model<MyInterface>),但感觉它重复了由 完成的模型创建MongooseModule.forFeature,因为它再次将 mongoose 模型与模式结合起来

任何帮助表示赞赏!

Der*_*ill 15

所以我认为方法3是正确的。

根据@silvelo 的评论,当您注入模式(但不是模式本身)时,您必须单独提供集合名称和接口:

@Module({
  imports: [
    MongooseModule.forFeature([
      { name: GAME_COLLECTION_NAME, schema: GameSchema },
    ]),
  ],
  controllers: [GamesController],
  components: [GamesService],
  exports: [GamesService, MongooseModule],
})
export class GamesModule implements NestModule {}

@Module({
  imports: [
    MongooseModule.forFeature([
      { name: USER_COLLECTION_NAME, schema: UserSchema },
    ]),
    GamesModule,
    LinksModule,
  ],
  controllers: [UsersController],
  components: [UsersService],
  exports: [UsersService],
})
export class UsersModule implements NestModule {}

@Component()
export class UsersService {
  constructor(
    @InjectModel(GAME_COLLECTION_NAME) private readonly gameModel: Model<Game>,
    @InjectModel(USER_COLLECTION_NAME) private readonly userModel: Model<User>,
  ) {}
}
Run Code Online (Sandbox Code Playgroud)