mongodb:使用嵌套文档或带有引用的单独集合

Posted

技术标签:

【中文标题】mongodb:使用嵌套文档或带有引用的单独集合【英文标题】:mongodb: use nested document or separate collections with references 【发布时间】:2016-04-15 10:02:38 【问题描述】:

我刚开始使用 mongoDB。

我必须存储用户数据。对于每个用户,每天都会添加一个小数据记录(不超过 500 字节)或更新其中的一些(大部分时间不超过 10 个)。

现在我的问题是,我应该将其建模为一个用户集合,每个用户文档中都嵌入了数据记录,还是有一个用户集合和一个数据记录集合,每个数据文档都引用了用户文档?

【问题讨论】:

【参考方案1】:

这完全取决于用例——比如数据的性质、读取频率、数据访问模式等。

在您的情况下,“小数据记录”似乎依赖于用户数据,而不是真正的独立数据。由于大小也很小,最好将数据嵌入到用户集合中。

【讨论】:

【参考方案2】:

这主要取决于您要在数据库上执行的查询

我假设您需要在您的数据库中存储用户特定数据(姓名、地址、ecc)和“其他”数据(您的“小数据记录”)

如果查询要获取用户特定数据以及“其他”数据,您最好只使用用户集合并将“其他”数据嵌入用户集合中。这样,您可以在一个查询中获取用户特定数据和“其他”数据

如果查询将只获取“其他”数据(从 user_id 的示例开始),并且您计划永远不需要用户特定数据以及“其他”数据,则可以使用数据集合,您可以在其中'将存储您的“其他”数据以及 user_id(例如用于更新数据)

请记住,通常不建议在 mongodb 中使用引用,除非您有充分的理由这样做,所以我会选择第一个解决方案

【讨论】:

那么向子文档中添加新记录不是问题吗?我每次都必须为此加载整个文档吗? 是的,您可以更新和添加数据到您的子文档,您不需要为此加载整个文档 非常感谢。我也想将所有记录与用户数据一起保存。 不客气。请记住,在 mongo 中,对于在对集合进行建模之前了解如何查询数据非常有用。因此,请尝试了解您将如何处理您的数据:尝试一些具有潜在集合结构的测试查询,然后找到将数据存储在集合中的最佳方式

以上是关于mongodb:使用嵌套文档或带有引用的单独集合的主要内容,如果未能解决你的问题,请参考以下文章

在 Mongodb 中查询嵌套模式?

MongoDB:用于搜索性能的嵌套值与单独的集合 - 数据库模式设计

MongoDB $reduce(aggregation) 组与数组中嵌套文档的总和并按组计数

用于多个对象数组的猫鼬嵌套模式

用于预订、嵌套或引用的 MongoDB 模式?

用于预订、嵌套或引用的 MongoDB 模式?