MongoDB:如何引用变量路径?
Posted
技术标签:
【中文标题】MongoDB:如何引用变量路径?【英文标题】:MongoDB: How to make a reference to a variable path? 【发布时间】:2017-01-11 11:29:58 【问题描述】:我有一个名为 PageSection 的架构。 PageSection 嵌入了 Schema ContentItem 的数组。内容项应该引用其他集合的文档,这些文档可以是可变的 - 例如文本、图片、链接、复选框……
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"
]
);
【问题讨论】:
您能否在reference to elements of another model
上澄清一下。你的意思是它可以包含来自任何其他集合的 objectIds?
是的,这就是我的意思 - 我刚刚编辑了问题。
我考虑到了这一点并回答了。我还在找。如果我找到了摆脱猫鼬的内置方法,我会编辑我的答案。 :)
【参考方案1】:
我不确定这个问题,正如我之前在评论中指出的那样。如果“各种模型的路径”意味着“对其他模型的引用”,我认为您正在寻找填充。根据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 方法。您也可以在here 中找到更多信息。在这种技术中,您需要
-
为所有 contentItem 路径创建基本架构
使用鉴别器进行鉴别
我仍然不建议这样做,因为它会导致糟糕的设计。
根据here,最好使用已定义的类型来保持引用。
您仍然可以使用自己的方式在 contentItems
数组中使用 id 和 collection/ref 字段来管理引用,我认为在这种情况下会更好。
希望对你有帮助
【讨论】:
以上是关于MongoDB:如何引用变量路径?的主要内容,如果未能解决你的问题,请参考以下文章