如何即时获取模型参考 Nestjs mongoose

Posted

技术标签:

【中文标题】如何即时获取模型参考 Nestjs mongoose【英文标题】:How can I get model reference on the fly nestjs mongoose 【发布时间】:2021-10-16 06:59:00 【问题描述】:

所以我的问题是我的模型被我们域的一种类型分隔,并且它有很多类型,每个 em 都有一个专用的集合。据我所知,我们可以像这样在服务构造函数中注入模型:

@InjectModel(ModelName.Job) private readonly jobModel: JobModel,

在构造函数中注入所有这些集合对我来说有点混乱,而且它们同时也没有用。所以我想知道我是否可以使用我们的域类型作为键在服务的方法中动态加载猫鼬模型,或多或少与这样的模块引用相同:

private getModelReference(reference: any) 
    return this.moduleReference.get(ModelName[reference]);

但是,任何其他动态加载模型的解决方法都值得赞赏。

【问题讨论】:

【参考方案1】:

技术上是可以做到的。使用上面的代码,您可以做到

private getModelReference(reference: any) 
  return this.moduleReference.get(getModelToken(ModelName[reference]));

假设ModelName[reference] 指回一个猫鼬模型名称(即Cat.name 或只是'Cat'

【讨论】:

哦,是的,就是这样。但是,我不知道为什么 Nestjs 会说Nest could not find ImageBoundingBoxModel element (this provider does not exist in the current context)。我在第二个参数中尝试了strict: true,但仍然没有运气。你有什么建议吗?还是我应该喜欢预先加载一些东西? 如果MongooseModule.forFeature([]) 为您要解决的每个模块引用调用?这将是我的第一个猜测 我会尝试,一旦我得到它的工作,将返回并接受答案。谢谢 现在可以使用,带有附加参数strict: false。这是this.moduleReference.get(getModelToken(ModelName[reference]), strict: false); 在谈到moduleRefget 方法时,我似乎总是忘记添加 strict: false 。感谢您在中添加

以上是关于如何即时获取模型参考 Nestjs mongoose的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Nestjs 中的请求范围提供程序动态更改数据库连接?

如何引用我试图保存在 nestjs/mongoose 中的模式?

NestJS如何在单元测试中创建新的猫鼬模型?

如何使用 Sequelize-Typescript 模型定义指定 NestJs 控制器的返回类型?

使用 NestJS 测试猫鼬模型

无法在关系 nestjs/mongoose 上查询条件