我想根据架构中的另一个属性获得动态参考?
我有以下架构,其中位置可以由个人或组织控制(例如,办公楼由公司控制,而本地商店由所有者控制)。
// Has other fields - brief for simplicity.
var personSchema = new Schema({
_id: {type: String, required: true},
name: {type: String, required: true},
});
var PersonData = mongoose.model('PersonData', personSchema );
// Has other fields - brief for simplicity.
var organizationSchema = new Schema({
_id: {type: String, required: true},
name: {type: String, required: true},
members: [{ type: String, ref: 'PersonData'}]
});
var OrganizationData = mongoose.model('OrganizationData', organizationSchema );
var locationSchema = new Schema({
_id: {type: String, required: true},
name: {type: String, required: true},
controlledBy:{
type: {String, enum: [ 'Organization', 'Individual']},
controller: { type: String, ref: 'PersonData' or 'OrganizationData'}
}
});
我想一个选择是将两个字段放入" controlledBy"但不确定这是否是最好的方法呢?
controlledBy:{
type: {String, enum: [ 'Organization', 'Individual']},
individual: { type: String, ref: 'PersonData' },
organization: { type: String, ref: 'OrganizationData'}
}
有了上述内容,我想我可能会放弃那种类型吗?
答案 0 :(得分:0)
我遇到了类似的问题,我使用了您使用的相同解决方案。
但是后来,我被介绍给了Dynamic Referencing with refPath
。 ref
和 refPath
之间的区别在于,使用 refPath
,您可以配置 Mongoose 为每个文档使用的模型,而不是使用 ref
的硬编码字符串。
我建议您的解决方案是:
controllerType:{
type: String,
enum: [ 'Organization', 'Individual']
},
controllerId: {
type: Schema.Types.ObjectId,
refPath: 'controllerType'
}