被MongoDB用Aggregate暴打的後端小菜雞日記-day19-日期時間操作符(上)

鰻魚燒
Sep 19, 2022

--

結束連續三天陣列操作符的介紹,讓我們往下一個主題邁進,介紹日期時間相關的操作符,今天主要專注在取得一個日期資料中,它的年份、月份…等等相關的操作。

Photo by Estée Janssens on Unsplash

以一個日期的資料"2022-09-16T14:27:20.300Z"來做舉例,列出比較常見的用法。

  1. $year:取得年份,現在是2022年,會回傳2022。
  2. $month:取得月份,現在是9月,會回傳9。
  3. $dayOfMonth:取得日期是幾號,因為是9/16,所以回傳16。
  4. $hour:取得時間,因為是14:27:20.300,所以小時會顯示14。
  5. $minute:取得時間,因為是14:27:20.300,所以分鐘會顯示27。
  6. $second:取得時間,因為是14:27:20.300,所以秒數會顯示20。
  7. $millisecond:取得時間,因為是14:27:20.300,所以毫秒數會顯示300。
  8. $dayOfYear:計算從2022-01-01到2022-09-16經過幾天,結果會回傳259。
  9. $dayOfWeek:計算2022-09-16會是星期幾,回傳格式是 1 (星期日) ~ 7 (星期六)
  10. $week:計算從2022-01-01到2022-09-16經過幾週,結果會回傳37。

有了這些基本概念,我們可以來舉一個實務上可能會用到的情境。
例如:我們現在有多筆商品販售的資料。

經理希望我們分析每月的銷售狀況,並且進行排序,可以使用以下指令。

aggregate主要的流程是,先將price和amount相乘,計算每一筆訂單的消費金額,同時取得交易是在幾月進行,再利用月份進行分組,並且計算出每個月的銷售總合,最後在按照銷售額進行排序。

ps.如果想要提前了解更多日期時間操作符,可以參考官方文件,明天還會繼續介紹相關的應用。

--

--

鰻魚燒

剛轉職成後端工程師的小菜雞,分享自己的學習筆記