説明しているクエリは、一連のドキュメントにUTC日時が含まれている場合、それらのドキュメントを日ごとにグループ化しています。
MongoDBは、日付/時刻を1970年1月1日からのミリ秒数として内部的に保存するため、最初のステップでは、各ドキュメントの開始日を計算してから、その開始日値でグループ化する必要があります。
MongoDB 5.0を使用している場合は、 $dateTrunc を使用できます。 演算子:
{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}
古いバージョンの場合、1日の始まりを表す日付オブジェクトを計算するか、日付のみを含む文字列を作成できます。
文字列オプションの場合:
{$concat: [
{$toString:{$year:{ date:"$createdAt", timezone:"America/New_York" }}},
"-",
{$toString:{$month:{ date:"$createdAt", timezone:"America/New_York" }}},
"-",
{$toString:{$dayOfMonth:{ date:"$createdAt", timezone:"America/New_York" }}},
]}
したがって、全体的な集約パイプラインは次のようになります。
- $ matchを使用して、目的の時間枠でドキュメントを選択します
- $projectで各ドキュメントの開始日を計算します
- $ groupを一日の始まりまでに、発生回数を数えます
- ドキュメントを目的の形式に変換するためのさらなる段階