您如何决定在MongoDB中何时创建集合,何时创建嵌入文档?

您如何决定在MongoDB中何时创建集合,何时创建嵌入文档?,mongodb,nosql,Mongodb,Nosql,我目前正在通过MongoDB学习noSQL,但我的学校教育和工作经验是使用关系数据库 我目前有一个用户集合,我需要实现存储用户配置文件页面的网页点击量的功能,以及大约5个其他统计数据 我应该创建一个新集合来存储此信息,还是应该创建一个嵌入式文档来存储Users集合中的这6条信息 谢谢 创建嵌入文档,直到它们不再有意义包含在一个集合中。与用户文档相关的统计数据对于存储嵌入式文档是100%有意义的。简单地说…用户配置文件具有统计信息。这些统计数据对任何其他收藏都没有任何意义 如果您最终拥有一个确实需

我目前正在通过MongoDB学习noSQL,但我的学校教育和工作经验是使用关系数据库

我目前有一个用户集合,我需要实现存储用户配置文件页面的网页点击量的功能,以及大约5个其他统计数据

我应该创建一个新集合来存储此信息,还是应该创建一个嵌入式文档来存储Users集合中的这6条信息


谢谢

创建嵌入文档,直到它们不再有意义包含在一个集合中。与用户文档相关的统计数据对于存储嵌入式文档是100%有意义的。简单地说…用户配置文件具有统计信息。这些统计数据对任何其他收藏都没有任何意义


如果您最终拥有一个确实需要引用的集合,因为许多不同的集合可能引用单个文档,那么将其拆分为一个集合并使用id引用是有意义的。当您开始考虑在一个嵌入文档中更改某些内容时必须更新许多其他文档时,最好转移到一个唯一的集合。这样一来,每个文档只引用一个id,该id可以随时更改其文档数据。

我还需要考虑一下应用程序将如何使用它。生成在上下文中更“场景/视图”特定的文档可能会有好处,而且每次都拉一个巨大的文档可能没有意义,只是为了利用数据的子集,每次对该视图都是相同的。但是,我还是不知道应用程序的外观。如果我使用事件源,我会创建更多特定于视图的读取模型,然后可能会将您的案例拆分。如果某件事情本身是有意义的,那么这肯定是讨论中要考虑的最重要的事情之一。访问模式、嵌入式文档的生命周期(即:Uml组合与聚合讨论)是另外两个方面。