2013-02-19 61 views
0

因此,我一直在观看this视频以了解MongoDB数据建模。在一对多的关系,扬声器谈论三种不同类型:嵌入式数组ID和嵌入式数组在MongoDB中的区别

  1. 嵌入式阵列/数组键:在一个特定的文件,你将有一个场,这将是一个数组引用其他文件(例如,blog_posts在用户文档中的属性将存储用户创建的博客文章的所有ID)
  2. 嵌入式树:与其他事物引用数组不同,我们在文档中包含完全嵌入的文档。
  3. 标准化:你有两个集合和彼此之间的引用。

那么,嵌入式数组键和标准化类型之间的区别是什么?嵌入式数组是否也在引用另外两个集合?

回答

1

区别很简单(不幸的是在视频中有点混淆)。

想象一下建模博客文章(Post)和评论(Comment)。

  1. 嵌入式阵列:Post文档包含所有Comment文档的所有ID的数组。 Comment存储在单独的文档(和/或集合)中。
  2. 树:Post文件包含嵌入式Comment s。它们不存储在不同的文档中或存储在它们自己的集合中。虽然这表现非常好,但BSON文档的大小限制为16MB,这使得这可能更难以处理。
  3. 标准化:A Post文档和Comment s分开存储。然而,在这种情况下的Comment文档具有回到Post的外键类似参考。因此,它可能有一个名为postId的字段。它会引用与Comment相关的Post。该模式与#1不同,因为Post文档不包含Comments的列表。所以,虽然这个选项使得评论的数量基本上是无限的/无限制的,但是它可以使检索评论更加低效,而不需要建立特定的索引(如postId,commentDate可能是有用的)。