【问题标题】:MongoDB Schema Design - New Collection or Reference?MongoDB Schema Design - 新集合还是参考?
【发布时间】:2011-01-03 08:39:26
【问题描述】:

我遇到了一个关于 MongoDB 架构的问题。参考 MongoDB Schema Design 上的示例,关于 db.students 和 db.courses。

由于我更习惯于 SQL 结构化,我仍然对这个引用或嵌入问题感到困惑。所以,这个例子只显示了db.students内的课程,引用了db.courses。那么如果我要对我的课程进行分类如humanities、languages等,我该怎么做呢?

有什么更好的方法?

    1. 创建一个名为 `db.categories` 的集合并将 db.courses 引用到它?
// db.courses
{ name: Biology, cat: 1 }
{ name: English, cat: 2 }

// db.categories
{ cat: 1, name: Humanities }
{ cat: 2, name: Languages }
    2. 只是嵌入课程中?
// db.courses
{ name: Biology, cat: Humanities }
{ name: English, cat: Languages }
{ name: History, cat: Humanities }

谁能给点建议,我该怎么办?

谢谢。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    简介:

    在你的情况下,这两种变体都很好,因为类别只是枚举,你不需要加载类别来显示课程,你只需要创建一些枚举并通过 id 获取类别名称。

    但是,例如,如果您有表 db.users 并且每个用户都有 db.courses 的集合,则您不需要创建单独的文档,您只需要嵌套的集合课程。这真的很酷,因为在 sql 中您需要创建具有一对多引用的单独表。

    文档数据库的一大好处是您可以创建具有嵌套集合的大型文档,而无需连接表。

    答案:

    所以在你的情况下,我建议两种方法:

    1. 为类别创建枚举并通过 id 获取类别名称(但不是从 mongo 加载)。
    2. 只需在课程中复制类别名称(但第一种情况更好,因为如果类别名称发生更改,您需要使用新的类别名称更新每个课程)。

    【讨论】:

      猜你喜欢
      • 2013-03-28
      • 2015-09-03
      • 2011-03-03
      • 2012-09-06
      • 2011-02-25
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 2011-08-10
      相关资源
      最近更新 更多