在 MongoDB 中存储数据的最佳方式

Posted

技术标签:

【中文标题】在 MongoDB 中存储数据的最佳方式【英文标题】:Best way to store data in a MongoDB 【发布时间】:2020-07-09 11:28:11 【问题描述】:

我正在构建一个网站,用户可以在其中为其组中的其他用户创建任务。然后,其他用户可以回答这些任务的答案。我的第一个想法是为每种类型创建一个集合:

一个用户集合,其中包含包含用户 ID 和组 ID 的文档。 包含任务 ID、创建它的用户 ID 和组 ID 的文档的任务集合。 一个答案集合,其中包含包含答案 ID、创建它的用户 ID 和与之相关的任务 ID 的文档。

使用这种方法,一切都会分开。问题是,如果我需要为组中的每个用户检索任务的每个答案。我必须遍历所有用户并找到属于该组的那些,然后我需要遍历所有答案并找到与任务相关的 A,而 B 是由该组的用户创建的。

另一种方法是创建一个大集合,其中包含每个组的文档,每个组包含所有用户,每个用户都包含他们的所有任务,每个任务都包含任务的所有答案。但我不喜欢这种嵌套方法,因为我无法轻松完成所有任务。我也不能让用户分成两组。

所以基本上一个模态或多个模态。这里最好的方法是什么?

【问题讨论】:

【参考方案1】:

我建议:

包含用户数组和任务数组的组集合 用户集合,其中包含用户创建任务的数组、他们所属的组数组以及他们给出的答案数组 任务集合,包含该任务的答案数组和任务所属组的 ID 答案集合及其所属任务的 ID 和创建者

MongoDB architecture: how to store a large amount of arrays or sub documents in a scalable way

【讨论】:

组集合是包含整个用户和任务还是仅包含 ID? 它将有一个属于该组的用户 ID 数组和一个属于该组的任务的 ID 数组。通过这种方式,您可以填充您需要的有关该组中的用户或任务的任何信息。

以上是关于在 MongoDB 中存储数据的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

地图应用程序 - 在 MongoDB 中存储坐标的最佳方式

存储可从管理员界面配置的应用程序设置的最佳方式?

在 MERN 堆栈 Web 应用程序中存储图像的最佳方式

在 Redshift 中存储事件数据的最佳方式是啥?

MongoDB数据建模性能

具有大量读写的海量数据的最佳数据存储