Так что я думаю, что метод 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>,
) {}
}