可以說我有一個網站就像digg.com我有一大堆的文章,人們可以在自己喜歡的文章進行投票。MongoDB的架構設計 - 以投票帖子
我希望能夠查詢得到了一定的時間內(最後一小時,最後一天,上週)通過投票數量排序,得票最多的文章。
像往常一樣用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,但我不知道如何查詢votes數組以獲得過去24小時票數最多的文檔。
我傾向於第二個,因爲它會更容易查詢的投票通過投票,我認爲分組,但我不知道它會如何執行。這就是你如何在關係數據庫中做到這一點,但它看起來並不是很有說服力 - 但我不確定它是否是一個問題,是嗎?
或者我使用兩者的組合?我也會實時進行這種類型的聚合查詢,每次頁面加載。或者我只是每分鐘運行一次查詢,並將結果存儲在查詢結果集合中?
你將如何實現這個模式?
相關的問題:http://stackoverflow.com/questions/ 9296793 /高效的文檔格式的存儲票在mongo - 分貝 –
也相關:http://stackoverflow.com/questions/7046462/best-way-to-model-a-voting-system-in -mongodb – wmassingham