node.js - 在 MongoDB 中存储数据的最佳方式
问题描述
我正在构建一个站点,用户可以在其中为其组中的其他用户创建任务。然后,其他用户可以回答这些任务的答案。我的第一个想法是为每种类型创建一个集合:
- 包含用户 ID 和组 ID 的文档的用户集合。
- 包含任务 ID、创建它的用户 ID 和组 ID 的文档的任务集合。
- 一个答案集合,其文档包含答案 ID、创建它的用户 ID 以及与之相关的任务 ID。
使用这种方法,一切都会分开。问题是,如果我需要为组中的每个用户检索任务的每个答案。我必须遍历所有用户并找到属于该组的那些用户,然后我需要遍历所有答案并找到与任务相关的 A,而 B 是由该组的用户创建的。
另一种方法是拥有一个大集合,其中包含每个组的文档,每个组包含所有用户,每个用户都包含他们的所有任务,每个任务都包含任务的所有答案。但我不喜欢这种嵌套方法,因为我无法轻松完成所有任务。我也不能让用户分成两组。
所以基本上一个模态或多个模态。这里最好的方法是什么?
解决方案
我会建议:
- 包含用户数组和任务数组的组集合
- 用户集合,其中包含用户创建任务的数组、他们所属的组数组以及他们给出的答案数组
- 任务集合,包含该任务的答案数组和任务所属组的 ID
- 使用它所属的任务的 ID 以及创建它的人来回答集合
推荐阅读
- makefile - make 无法编译 Vc 库
- python-3.x - 安装 nltk 包时出现 ModuleNotFoundError: No module named '_sqlite3'
- asp.net-mvc - 如何在 azure 上使用 asp.net mvc 结构部署 Angular 5
- ruby-on-rails - 在rspec中创建回调后的gettig弃用警告
- javascript - Mozilla中的Javascript剪贴板SetData错误
- dom - Electron:DevTools 让应用程序更快?
- angular - 使用模拟商店时如何在ngxs中模拟@Select
- ruby - 截取字符串的最后一个字符
- tensorflow - Tensorflow:tf.contrib.slim 和 tf.layers 之间的区别
- asterisk - 如何使用 MixMonitor 为每个录制的通话自动创建一个新的 wav 文件?