這個任務是經典的聚合框架:http://docs.mongodb.org/manual/core/aggregation/ 的第一個變體,你可以使用這樣的事情:
test> db.video.aggregate([{$unwind:'$stats'}, {$group:{_id:{name:'$video_name', day:'$stats.day'}, views:{$sum:'$stats.views'}}}])
{
"result" : [
{
"_id" : {
"name" : "Blabla2",
"day" : 3
},
"views" : 344
},
{
"_id" : {
"name" : "Blabla2",
"day" : 1
},
"views" : 684
},
{
"_id" : {
"name" : "Blabla",
"day" : 2
},
"views" : 342
},
{
"_id" : {
"name" : "Blabla2",
"day" : 2
},
"views" : 342
},
{
"_id" : {
"name" : "Blabla",
"day" : 1
},
"views" : 342
}
],
"ok" : 1
但你可能不得不在未來的問題,如果您的視頻的次數會像雪崩增加。 您可以使用幫助$匹配操作精確計算特定日期的統計數據,但這是臨時解決方案。
好主意是一個變化的數據模型更簡單(如果你能):
{
video_name: "Blabla",
day: x,
views: 342}
}
在這個模型中
,你不依賴於文件和聚合框架的大小,可以幫助您創建analitical觀點:
db.video.aggregate([{$group:{_id:{name:'$video_name', day:'$day'}, views:{$sum:'$views'}}}])
你可以簡單的選擇任何一天或一天的時間間隔,你可以按視頻或視頻,一天的名稱,你可以免費計算任何統計數據,如你所願;)
您的用戶需要什麼,以及您的查詢將如何構建?將統計信息放入單個文檔/視頻中可能意味着您將達到16MB MongoDB文檔限制。 – WiredPrairie 2013-04-26 00:52:51