mongo按照年度、月份、日期、小時分組統計(一)

整整惡心了我兩天,一度差點放棄使用分組。直接將數據按照分組的維度存儲就直接簡單查詢了。直到我找到了 $project 和 $dateToString $year $dayOfMonth 這些指令。

下面列一下我了解到的這些指令:

名稱 含義
$year 返回該日期的年份部分
$month 返回該日期的月份部分(between 1 and 12.)
$dayOfMonth 返回該日期的日部分
$hour 返回該日期的小時部分
$minute 返回該日期的分鐘部分
$second 返回該日期的秒部分(以0到59之間的數字形式返回日期的第二部分,但可以是60來計算閏秒。)
$millisecond 返回該日期的毫秒部分(between 0 and 999.)
$dayOfYear 返回該日期是這一年的第幾天。(全年366天)
$dayOfMonth 返回該日期是這一個月的第幾天。(1到31)
$dayOfWeek 返回的是這個周的星期幾。(1:星期日,7:星期六)
$week 返回該日期是所在年的第幾個星期(between 0 and 53)
$dateToString 格式日期:{ $dateToString: { format: <formatString>, date: <dateExpression> } }
# $dateToString的 format格式化
%Y  Year (4 digits, zero padded)    0000-9999
%m  Month (2 digits, zero padded)   01-12
%d  Day of Month (2 digits, zero padded)    01-31
%H  Hour (2 digits, zero padded, 24-hour clock) 00-23
%M  Minute (2 digits, zero padded)  00-59
%S  Second (2 digits, zero padded)  00-60
%L  Millisecond (3 digits, zero padded) 000-999
%j  Day of year (3 digits, zero padded) 001-366
%w  Day of week (1-Sunday, 7-Saturday)  1-7
%U  Week of year (2 digits, zero padded)    00-53
%%  Percent Character as a Literal  %
# 執行下面的語句可查看效果
# 注意:語句中的 requestTime字段必須是ISODate("") 方式存儲,如果是字符串或者long類型不能使用這些函數
# java.util.Date 類型字段,使用spring的mongoTemplate 存儲則保存的就是ISODate類型的
db.requestLog.aggregate(
   [
     {
       $project:
         {
           date: { $dateToString : {format: "%Y-%m-%d", date: "$requestTime"} },
           year: { $year: "$requestTime" },
           month: { $month: "$requestTime" },
           day: { $dayOfMonth: "$requestTime" },
           hour: { $hour: "$requestTime" },
           minutes: { $minute: "$requestTime" },
           seconds: { $second: "$requestTime" },
           milliseconds: { $millisecond: "$requestTime" },
           dayOfYear: { $dayOfYear: "$requestTime" },
           dayOfWeek: { $dayOfWeek: "$requestTime" },
           week: { $week: "$requestTime" }
         }
     },
    {
         $match:{ # 查詢條件 ( year=2020 and month=1)
                year:2020,  
                month:1
          }
    }
   ]
)

db.requestLog.aggregate(
   [
     {
       $project: {
          yearMonthDayUTC: { $dateToString: { format: "%Y-%m-%d", date: "$requestTime" } },
          timewithOffsetNY: { $dateToString: { format: "%H:%M:%S:%L%z", date: "$requestTime", timezone: "America/New_York"} },
          timewithOffset430: { $dateToString: { format: "%H:%M:%S:%L%z", date: "$requestTime", timezone: "+04:30" } },
          minutesOffsetNY: { $dateToString: { format: "%Z", date: "$requestTime", timezone: "America/New_York" } },
          minutesOffset430: { $dateToString: { format: "%Z", date: "$requestTime", timezone: "+04:30" } }
       }
     }
   ]
)

db.requestLog.aggregate([
    {$match:{"rime":{'$gte': ISODate("2019-03-11T00:00:00Z")  ,'$lt':ISODate("2019-03-12T00:00:00Z")}}},     
  {
   $group:{
    "_id":"$requestTime",
    "c":{$sum:1},
    "b":{$avg:"$requestTime"}
   }
  },{$sort:{"$requestTime":1}}
 ])


 db.requestLog.aggregate(
   [
     {
       $project:
         {
                 
           date: { $dateToString : {format: "%Y-%m-%d", date: "$requestTime"} },
                     year_month: { $dateToString : {format: "%Y-%m", date: "$requestTime"} },
           day: { $dayOfMonth: "$requestTime" },
           responseTime: "$responseTime"
         }
     },
         {
         $match:{
                year_month:'2020-01'
          }
         },
         {
            $group:{
            "_id":"$day",
            "b":{$avg:"$responseTime"},
            "c":{$sum:1}
         }
        },
        {$sort:{"_id":1}}
   ]
)

 db.requestLog.aggregate(
   [
     {
       $project:
         {
                     year_month: { $dateToString : {format: "%Y-%m-%d", date: "$requestTime"} }
         }
     },
        
         {
            $group:{
            "_id":"$year_month"
         }
        },
        {$sort:{"_id":1}}
   ]
)

 db.requestLog.aggregate(
   [
     {
       $project:
         {
                      year_month_day_hour: { $dateToString : {format: "%Y-%m-%d %H", date: "$requestTime"} },
                      reqUrl: "$reqUrl",
                         responseTime: "$responseTime"
         }
     },
        {
         $match:{
                year_month_day_hour:'2020-01-14 01'
          }
         },
         {
            $group:{
            "_id":"$reqUrl",
            "b":{$avg:"$responseTime"},
            "c":{$sum:1}
         }
        },
        {$sort:{"b":1}}
   ]
)
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容