使用www.example.com定义具有双向参照的 Mongoose 模型Model.collection.name

uubf1zoe  于 2022-11-13  发布在  Go
关注(0)|答案(1)|浏览(117)

假设我有两个模式

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 }
  ...
}

但是,这会给予循环依赖错误。
有没有办法解决这个问题,或者我必须坚持使用硬编码的集合名称?

xwbd5t1u

xwbd5t1u1#

我不认为有直接的方法可以解决这个问题,但是如果你非常反对硬编码的集合名称的话,有一个可能的解决方法。
可以将名称存储在单独的文件中,并让模型和引用都使用它。
例如:

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

然后在model-a.js中,您可以让它使用mongoose.model(Names.ModelA)“编译”模型并引用Names.ModelB
我不确定我是否会鼓励大多数项目这样做,因为这会增加一些复杂性,但我可以想象一些使用更多动态模型名称的用例,在这些用例中,只在一个位置进行更改会很好。

相关问题