考虑一下我有一个网站,上面有很多文章,人们可以对他们喜欢的文章进行投票。
我希望能够查询到按票数排序的特定时间(最后一小时、最后一天、上周)内得票最多的文章。
与 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"
}
第一个是更多 Documentey,但我不知道如何查询投票数组以获取过去 24 小时内投票最多的文档。
我倾向于第二个,因为我认为查询按投票分组的投票计数会更容易,但我不确定它的表现如何。这就是你在关系数据库中的做法,但它似乎不是很有文档记录——但我不确定它是否有问题,是吗?
还是我使用两者的组合?我还会在每个页面加载时实时执行这种类型的聚合查询。或者我只是每分钟运行一次查询并将结果存储在查询结果集合中?
您将如何实现此架构?