【发布时间】:2012-07-03 13:50:52
【问题描述】:
假设我有一个网站,上面有很多文章,人们可以对他们喜欢的文章进行投票。
我希望能够查询到在某个时间(最后一小时、最后一天、上周)内按票数排序的得票最多的文章。
与 MongoDB 一样,有几种不同的方法可以实现这一点,但我不确定哪一种是正确的。
- 一个帖子文档,其中包含一个投票数组 - 投票本身就是包含用户 ID、用户名和投票日期的文档:
{
"_id": "ObjectId(xxxx)",
"title": "Post Title",
"postdate": "21/02/2012+1345",
"summary": "Summary of Article",
"Votes": [
{
"userid":ObjectId(xxxx),
"username": "Joe Smith",
"votedate": "03/03/2012+1436"
},
]
}
- 单独的投票集合,包含个人投票的详细信息和对投票帖子的引用:
{
"_id": "ObjectId(xxxx)",
"postId": ObjectId(xxxx),
"userId": ObjectId(xxxx),
"votedate": "03/03/2012+1436"
}
第一个是 more Documentey,但我不知道如何查询投票数组以获取过去 24 小时内投票最多的文档。
我倾向于第二个,因为我认为查询按投票分组的投票计数会更容易,但我不确定它的表现如何。这就是你在关系数据库中的做法,但它似乎不是很记录 - 但我不确定这是否有问题,是吗?
或者我是否将两者结合使用?我还会在每个页面加载时实时执行这种类型的聚合查询。还是我只需要每分钟运行一次查询并将结果存储在查询结果集合中?
您将如何实现此架构?
【问题讨论】:
标签: mongodb