使用Model.collection.name定义具有双向引用的猫鼬模型



假设我有两个模式

A: {
someStuff: String,
children: [{ type: ObjectId, ref: 'B' }]
},
B: {
someOtherStuff: String,
parent: { type: ObjectId, ref: 'A' }
}

我更愿意把参考文献写成:

A: {
children: [{ type: ObjectId, ref: modelB.collection.name }]
...
},
B: {
parent: { type: ObjectId, ref: modelA.collection.name }
...
}

但是,这将给我一个循环依赖性错误。

有没有办法解决这个问题,或者我必须坚持使用硬编码的集合名称?

我不认为有办法直接绕过它,但如果您非常反对硬编码的集合名称,则有可能绕过它。

您可以将名称存储在一个单独的文件中,并让模型和引用都使用它

例如

model-names.js
{
ModelA: 'ModelA',
ModelB: 'ModelB',
}

那么在CCD_ 1中;编译";具有mongoose.model(Names.ModelA)和参考Names.ModelB的模型

我不确定我是否会鼓励大多数项目这样做,因为这会增加一些复杂性,但我可以想象一些具有更动态模型名称的用例,在这些用例中,只在一个位置进行更改会很好。

最新更新