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:如何引用变量路径?的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb父引用树获取当前位置和完整路径

MongoDB安装和配置

mongodb安装

MongoDB添加环境变量

(MONGODB) 删除父集合时如何删除引用的数据

windows下怎么让mongodb关闭