Mongoose用createConnection多库连接时模型未存入mongoose.models是否有问题
问题解答
现象原因
- Mongoose 内置一个默认的全局连接实例,直接调用
mongoose.model()注册的模型都会挂载到这个全局实例的models属性下,你访问的mongoose.models本质就是全局连接的模型集合。 - 你通过
createConnection()创建的A、B都是独立的连接实例,每个实例会维护一套完全隔离的models集合,不会同步到全局的mongoose.models中,因此你无法通过全局对象查看到这些模型。这种隔离是Mongoose的特意设计,用来避免多数据库场景下的同名模型冲突。
配置正确性与风险说明
你当前的配置没有任何问题,属于多数据库连接场景下的标准实现:
- 目前代码运行正常就说明逻辑没有问题,不需要修改模型注册方式。
- 如果强行改用
mongoose.model注册多库模型反而会引发故障:全局连接只能绑定一个数据库,跨库模型注册会出现数据读写归属错误,导致数据被写入错误的数据库。
查看全量模型的解决方案
如果需要获取所有模型做概览,分别访问每个独立连接的models属性聚合即可,示例如下:
// 合并两个数据库的模型做统一概览 const allModels = { 数据库A: A.models, 数据库B: B.models } console.log(allModels)
内容的提问来源于stack exchange,提问作者Coen
相关产品推荐
相关产品推荐

