2013-06-29 51 views
0

我有一個分析集合,我將查詢作爲單個文檔存儲。我想統計過去一天(24小時)內發生的查詢次數。這裏的聚集命令,因爲它是:完成此彙總管道需要一些幫助

db.analytics.aggregate([{$group:{_id:{"day":{$dayOfMonth:"$datetime"},"hour":{$hour:"$datetime"}},"count":{$sum:1}}},{$sort:{"_id.day":1,"_id.hour":1}}]) 

結果是這樣的:

. 
. 
. 
     { 
      "_id" : { 
       "day" : 17, 
       "hour" : 19 
      }, 
      "count" : 8 
     }, 
     { 
      "_id" : { 
       "day" : 17, 
       "hour" : 22 
      }, 
      "count" : 1 
     }, 
     { 
      "_id" : { 
       "day" : 18, 
       "hour" : 0 
      }, 
      "count" : 1 
     } 
. 
. 
. 

本來,我的計劃是增加一個$limit操作,簡單地確定最後的24個結果。這是一個很棒的計劃,直到你意識到有幾個小時沒有任何疑問。所以最近的24份文件可能會在一天之內返回。我想到使用$match,但我不知道如何去構建它。有任何想法嗎?

回答

0

首先,您需要按照當前日期或集合中最新的文檔獲取當天。然後使用查詢等確定日:

db.analytics.aggregate([ 
    {$project:{datetime:"$datetime",day:{$dayOfMonth:"$datetime"}}}, 
    {$match:{day:3}}, 
    {$group:{_id:{"hour":{$hour:"$datetime"}},"count":{$sum:1}}}, 
    {$sort:{"_id.hour":1}} 
]); 

,其中3臺在每個月的日{$比賽:{天:}}

的想法是增加每天場,所以,我們可以按照它進行過濾,然後按小時對文檔進行分組並整理。