【发布时间】:2013-05-09 05:51:35
【问题描述】:
我有一个 User 实体,其中包含他/她正在关注的其他用户 ID 数组。
var userSchema = {
following: { type: Array }
};
我有一个 RESTful API,当我请求 User 时,我的应用程序需要知道 User 有多少关注者。
我看到的两个选项是:
- 当请求
User时,进行计数查询,例如:{ following: { $in: [userId] } } - 当
User是POSTed 时,检查是否有任何用户ID 添加或删除到following数组,如果是,使用MongoDB 的$inc增加或减少followersCountUser文档上已关注/取消关注的属性。
他们还有其他选择吗?如果没有,最好的选择是什么?将followersCount 属性放入文档本身我觉得有点奇怪,因为这表明它可以由应用程序更新,而实际上它只是一个动态计数。
我有类似的情况,我需要我的 RESTful API 来返回与 website 关联的 articles 的数量。我是根据请求计算该网站的文章数,还是存储计数属性并在每次创建与该网站相关联的新文章时更新它?
【问题讨论】:
-
您可能想要考虑(并在问题中包含)您的读/写负载是什么 - 在决定 MongoDB 中的架构时,您如何使用数据以及围绕响应性/延迟的要求至关重要(以及在所有非关系系统中)。
-
" 我觉得在文档本身中添加 followerCount 属性有点奇怪,因为这表明它可以由应用程序更新,而实际上它只是一个动态计数。"我有同样的感觉,并通过在我放置所有计算字段的文档中计算一个对象
c来“解决”它,在这种情况下为followersCount。它提供了一些(心理上)关注点的分离,尽管它当然不是无懈可击的。使用后台作业重新计算仅在c上执行。