所以,我一直在看这个视频,以学习 MongoDB 数据建模。在一对多关系中,说话者谈论三种不同的类型:
- 嵌入式数组/数组键:在特定文档中,您将有一个字段,该字段将是引用其他文档的数组(例如,用户文档中的 blog_posts 属性将存储用户创建的博客文章的所有 ID)
- 嵌入式树:我们没有一个包含对其他事物的引用的数组,而是在文档中拥有完全嵌入的文档。
- 标准化:您有两个集合和彼此之间的引用。
那么,嵌入式数组键和标准化类型之间有什么区别?嵌入式数组不是也引用了另外两个集合吗?
区别很简单(不幸的是,该视频中呈现的有点令人困惑)。
想象一下为博客文章 ( Post
) 和评论 ( Comment
) 建模。
Post
文档包含所有文档的所有 ID 的数组Comment
。Comment
存储在单独的文档(和/或集合)中。Post
文档包含嵌入Comment
的 s。它们不存储在不同的文档或它们自己的集合中。虽然这表现得非常好,但 BSON 文档的大小限制为 16MB,这使得这可能更难以处理。Post
文档,和Comment
s分开存放。然而Comment
,在这种情况下,文档有一个类似外键的引用回Post
. 因此,它可能有一个名为postId
example 的字段。它将引用Post
与Comment
. 此模式与 #1 不同,因为Post
文档不包含Comments
. 因此,虽然此选项使评论的数量基本上是无限的/无限的,但它可能会使评论的检索效率更低,而无需构建特定的索引(如 a postId
,commentDate
可能有用)。