MongoDB: 如何引用变量路径?
MongoDB: How to make a reference to a variable path?
我有一个名为 PageSection 的架构。 PageSection 嵌入了 Schema ContentItem 的数组。内容项应引用其他集合的文档,这些文档可以是可变的 - 如文本、图片、Link、复选框、...
var PageSection = new mongoose.Schema({
title: String,
order: Number,
contentItems: [{
order: Number,
element: {
type: mongoose.Schema.Types.ObjectId,
path: "Path_to_various_models"
}
}]
});
这可能吗?或者对于这种变量引用有更好的方法吗?
谢谢!
编辑:
感谢您提供使用鉴别器 Swagata 的建议。我不知道那种继承机制。但无论如何,我发现这个解决方案有点复杂。
我现在使用一个解决方案,其中 ContentItem 为每种类型的内容项包含一个字段。也许它更像是一种解决方法,而不是解决方案。
var PageSection = new mongoose.Schema({
title: String,
order: Number,
contentItems: [{
order: Number,
text: {
type: mongoose.Schema.Types.ObjectId,
path: "Text"
},
picture: {
type: mongoose.Schema.Types.ObjectId,
path: "Picture"
},
link: {
type: mongoose.Schema.Types.ObjectId,
path: "Link"
}
}]
});
我不确定我之前在评论中指出的问题。我认为如果 'Path to various models' 表示 'references to other models',您正在寻找 populate。根据 here,你可以做类似
var PageSection = new mongoose.Schema({
title: String,
order: Number,
contentItems: [{
order: Number,
element: mongoose.Schema.Types.ObjectId,
path: { type: Schema.Types.ObjectId, ref: 'Story' }
}]
});
现在,我明白了,这只是一种类型,一种参考,路径不能只是故事。
如果您的元素来自具有基本类型和多个派生类型的单个集合,您也可以选择 Mongoose discriminator method here. You can find more in 。在这种技术中,您需要
- 为所有 contentItem 路径创建基本架构
- 使用鉴别器进行鉴别
我仍然不建议这样做,因为它会导致糟糕的设计。
并且根据 here,最好将引用与定义的类型放在一起。
您仍然可以在带有 id 和 collection/ref 字段的 contentItems
数组中以自己的方式管理引用,我认为在这种情况下会更好。
希望对您有所帮助
我有一个名为 PageSection 的架构。 PageSection 嵌入了 Schema ContentItem 的数组。内容项应引用其他集合的文档,这些文档可以是可变的 - 如文本、图片、Link、复选框、...
var PageSection = new mongoose.Schema({
title: String,
order: Number,
contentItems: [{
order: Number,
element: {
type: mongoose.Schema.Types.ObjectId,
path: "Path_to_various_models"
}
}]
});
这可能吗?或者对于这种变量引用有更好的方法吗?
谢谢!
编辑: 感谢您提供使用鉴别器 Swagata 的建议。我不知道那种继承机制。但无论如何,我发现这个解决方案有点复杂。
我现在使用一个解决方案,其中 ContentItem 为每种类型的内容项包含一个字段。也许它更像是一种解决方法,而不是解决方案。
var PageSection = new mongoose.Schema({
title: String,
order: Number,
contentItems: [{
order: Number,
text: {
type: mongoose.Schema.Types.ObjectId,
path: "Text"
},
picture: {
type: mongoose.Schema.Types.ObjectId,
path: "Picture"
},
link: {
type: mongoose.Schema.Types.ObjectId,
path: "Link"
}
}]
});
我不确定我之前在评论中指出的问题。我认为如果 'Path to various models' 表示 'references to other models',您正在寻找 populate。根据 here,你可以做类似
var PageSection = new mongoose.Schema({
title: String,
order: Number,
contentItems: [{
order: Number,
element: mongoose.Schema.Types.ObjectId,
path: { type: Schema.Types.ObjectId, ref: 'Story' }
}]
});
现在,我明白了,这只是一种类型,一种参考,路径不能只是故事。
如果您的元素来自具有基本类型和多个派生类型的单个集合,您也可以选择 Mongoose discriminator method here. You can find more in
- 为所有 contentItem 路径创建基本架构
- 使用鉴别器进行鉴别
我仍然不建议这样做,因为它会导致糟糕的设计。
并且根据 here,最好将引用与定义的类型放在一起。
您仍然可以在带有 id 和 collection/ref 字段的 contentItems
数组中以自己的方式管理引用,我认为在这种情况下会更好。
希望对您有所帮助