如何使用Mongoose在NestJS应用程序中使用多个MongoDB数据库?

vvppvyoh  于 9个月前  发布在  Go
关注(0)|答案(2)|浏览(104)

概述

仅供参考:我上传了一个完整的项目到GitHub。请随意下载并亲自查看。

我创建这个项目是为了识别NestJS、Mongoose和MongoDB的问题。从高层次上看,问题是针对项目内的多个数据库。似乎NestJS想在过程中的某个地方添加后缀'Model'
在我的 * 实际 * 应用程序中,我试图确保将文档上传到MongoDB(.这很容易)。我必须稍后对文档进行一些转换工作,比如在计划的作业中。一旦作业完成,我希望将转换后的文档存储在一个单独的 * 容器 * 中。
在这里,我一般使用术语“容器”--我不关心它是一个数据库还是同一个数据库中的集合。
我宁愿不修改我的数据,这样我就坚持简单的路线(这意味着所有东西都在同一个数据库中的通用fs.filesfs.documents集合中)。我的意思是,机制已经存在,并且有很好的文档记录,所以不确定为什么这个普通的例子不起作用。另外,是的,我假设我必须使用两个,因为我不认为MongoDB(更不用说Mongoose)提供了重命名这两个集合的机制。我将根AppModule中的两个独立连接标识为firstCxnsecondCxn,以便它们可以在各自的Module定义中引用。

A Few Things I've Tried

  • 我想可能有一些我错过的未记录的、明确的命名约定,所以我回去重命名了这些实体。我在它们的名称末尾添加了'Model'。这就是我开始看到整个'...ModelModel'问题的时候。
  • 当在装饰器中引用模型时,我在允许字符串的地方使用了显式的字符串值。例如,在first.server.ts中,我添加了@InjectModel('First')而不是@InjectModel(FirstModel.name)
  • FirstModule定义中的MongooseModule.forFeature(...)之前添加了对FirstModel类的引用。
  • 这似乎提供了一些向前的进展。嗯.至少,当我在FirstModule中更改它时,我开始在SecondModule中得到同样的错误。

错误输出

这是我在调试控制台中得到的输出.

Debugger attached.                                                                                                                                                                                                                                                                          
(node:27751) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.                                                                                                                                                                  
(Use `node --trace-deprecation ...` to show where the warning was created)                                                                                                                                                                                                                  
[Nest] 27751  - 12/11/2023, 2:57:23 PM     LOG [NestFactory] Starting Nest application...                                                                                                                                                                                                   
[Nest] 27751  - 12/11/2023, 2:57:23 PM     LOG [InstanceLoader] SecondModel dependencies initialized +41ms                                                                                                                                                                                  
[Nest] 27751  - 12/11/2023, 2:57:23 PM     LOG [InstanceLoader] MongooseModule dependencies initialized +0ms                                                                                                                                                                                
[Nest] 27751  - 12/11/2023, 2:57:23 PM     LOG [InstanceLoader] MongooseModule dependencies initialized +0ms                                                                                                                                                                                
[Nest] 27751  - 12/11/2023, 2:57:23 PM   ERROR [ExceptionHandler] Nest can't resolve dependencies of the FirstsService (?). Please make sure that the argument "FirstModelModel" at index [0] is available in the FirstModule context.

字符串
NestJS似乎在寻找名称末尾有一个额外的'Model'的东西。

提问

  • 有人见过这个吗?
  • 有什么明显的线索吗
  • 有没有什么好的例子可以在多个数据库/集合中使用NestJS、Mongo和Mongoose?

有奖问答

1.如果茶真的那么棒,为什么它会粘在锅里?
1.桑尼会得到一些特里克斯吗?桑尼还活着吗?
1.如果一只鸭子吃了午饭,然后马上去游泳,它会抽筋吗?

8yparm6h

8yparm6h1#

[在此处插入:facepalm:]

看起来我所掩盖的“腰带和吊带”的方法实际上只是“方法“。
@InjectModel中注入模型名称时,绝对需要在那里指定连接名称。因此,我的代码如下所示:

constructor(
    @InjectModel(FirstModel.name, 'firstCxn')
    private firstModel: Model<FirstModel>,
  ) {}

字符串

8yoxcaq7

8yoxcaq72#

**Yes**, we can used multiple mongoose databases in nestjs application.
but nestjs is the first mongoose import considered as a database and ignores the second mongoose import database link.

个字符

相关问题