2014-02-08 46 views
0

我將收集大量統計數據並計算一些數值(如流行度)。之後,我需要將它顯示爲圖形。我讀,我的任務看起來很簡單:每天創建文檔,按照文章中的描述存儲數據。當我需要在過去3天內獲得最受歡迎的值時,我纔會使用聚合框架。非常簡單....統計數據方案

但是,在這種情況下,如何獲得過去24小時內最流行的值?我可以過濾最近2天的文件,但它!=過去24小時...

是否有可能在日期範圍內靈活使用上述方案?

補充說:

下面的數據結構使用單個文件來存儲信息,全日:

{ 
    _id: "20101010/site-1/apache_pb.gif", 
    metadata: { 
     date: ISODate("2000-10-10T00:00:00Z"), 
     site: "site-1", 
     page: "/apache_pb.gif" }, 
    daily: 5468426, 
    hourly: { 
     "0": 227850, 
     "1": 210231, 
     ... 
     "23": 20457 }, 
    minute: { 
     "0": 3612, 
     "1": 3241, 
     ... 
     "1439": 2819 } 
} 

使用聚合框架我可以選擇上週(最大7),組通過的文件metadata.site和總和daily以獲得按站點的總訪問量。根據上面提出的方案,過去24小時內網站的訪問總數是否可以統計?

(這裏有一個簡單的方法來創建by hour文檔,但我不想這樣做,因爲性能的原因)

+0

請使用代碼和模式+數據示例更具體地提出您的問題。你不能指望人們閱讀一篇冗長的文章來回答你的問題。 ;) –

+1

固定。我希望這足以理解我的問題 –

回答

0

,您仍然可以保持相同的模式,所有你需要做的是改變了查詢。

而是在dailysum的,你只需要項目在搜索結果中daily。因爲在這種情況下您不必進行任何聚合,所以您甚至不必使用聚合框架,並且查詢變得非常簡單。以下是僅返回計數的新查詢的示例:

db.coll.find({date: {$gt: ISODate("2000-10-10T00:00:00Z"), 
        $lt: ISODate("2000-10-11T00:00:00Z")}}, 
      {"daily": 1, "_id": 0}); 
+0

它將返回當天的總訪問量......但它不等於過去24小時。假設當前時間是「12:23 pm」。所以我需要從'12:24 pm'Yestarday到現在收集數據。 –