MongoDB中Id的嵌入式数组和规范化样式的区别



所以,我一直在看这个视频,以便学习MongoDB数据建模。在一对多关系中,演讲者谈论三种不同的类型:

  1. 嵌入式数组/数组键:在特定文档中,您将有一个字段,该字段将是引用其他文档的数组(例如,用户文档中的blog_posts属性将存储用户创建的博客文章的所有id)
  2. 嵌入式树:我们在文档中完全嵌入了文档,而不是使用引用其他内容的数组
  3. Normalized:在彼此之间有两个集合和引用

那么,嵌入的数组键和规范化的数组键之间有什么区别呢?嵌入式数组不是也在引用另外两个集合吗?

区别很简单(不幸的是,在视频中有点令人困惑)。

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

  1. 嵌入式数组:Post文档包含所有Comment文档的所有ID的数组。Comment存储在单独的文档(和/或集合)中
  2. 树:Post文档包含嵌入的Comment s。它们不存储在不同的文档中,也不存储在自己的集合中。虽然这表现得很好,但BSON文档的大小限制为16MB,这可能会使其更难使用
  3. 规范化:Post文档和Comment文档分别存储。然而,在这种情况下的Comment文档具有对Post的类似外键的引用。例如,它可能有一个名为postId的字段。它将引用与Comment相关的Post。此模式与#1不同,因为Post文档不包含Comments的列表。因此,虽然此选项使Comments的数量基本上是无限制/无限制的,但如果不建立特定的索引,它可能会使注释的检索效率更高(例如postIdcommentDate可能很有用)

最新更新