mongodb - 在哪个集合中放置有关平均评分的数据?
问题描述
目前,我正在开发一个健身应用程序。我有用户和锻炼,它们存储在两个不同的集合中。
在用户文档中,我有一个包含已完成锻炼的数组,其中仅包含锻炼 ID 和这次经过的秒数。
一个新的用例可能是,每个用户都可以在完成锻炼后对锻炼进行评分。
我的问题是:在哪里存储这个评级信息?
现在的用例是:
- 查看哪个用户对哪个锻炼进行了评分以及评分的价值
- 查看锻炼的平均评分
目前,我的方法是将其存储在两个地方。首先,我在用户文档中存储一个用户对一次锻炼的个人评分。其次,我在锻炼文档中有一个名为avgRating的键。每次用户对锻炼进行评分时,我都会将个人评分存储在他的用户文档中,并通过 重新计算锻炼的平均评分newAvgRating=(oldAvgRating+userRating)/2
。
这是正确的方法还是有更好的方法?
我团队中的另一位工程师建议创建一个新集合,在其中存储哪个用户对哪个锻炼的评分值进行评分,然后按需计算平均评分,并将其简单地缓存在后端以获得更好的性能。但我认为这不是“类似 MongoDB 的”。您如何看待这种方法?
解决方案
推荐阅读
- python - tensorflow-gpu 安装在 ubuntu 18 上失败“InvalidArchiveError('存档错误 /anaconda/pkgs/cudatoolkit-10.1.243-h6bb024c_0.tar.bz2。”
- istio - Istio:当我启用 JWT RequestAuthentication 时,健康检查/sidecar 失败
- pca - 使用 PCA 时的大量主成分
- cmake - 由 sub_directory 二进制文件自动生成的 globbing 文件
- pdf - 我们可以使用 Ghostscript 将包含嵌入式字体的 PDF 转换为非嵌入式(标准字体)PDF 文档吗?
- postgresql - 在 postgreSQL 中将用户添加到数据库时出现问题
- javascript - 使用“排序”方法后如何计算元素的前一个索引?
- vb.net - 在 vb.net 中的项目/表单之间切换时出现问题
- scala - Spark DataFrame 将字符串格式的毫秒时间戳列转换为以毫秒为单位的人类可读时间
- swift - WatchOS 建立服务器连接