MongoDBの時間と日付の集計方法


  1. 特定の日付範囲内のドキュメントを集計する方法:
db.collection.aggregate([
  {
    $match: {
      dateField: {
        $gte: ISODate("2022-01-01"),
        $lte: ISODate("2022-12-31")
      }
    }
  },
  {
    $group: {
      _id: null,
      count: { $sum: 1 }
    }
  }
])

上記の例では、dateFieldというフィールドが特定の日付範囲内にあるドキュメントをカウントしています。$matchステージで指定した日付範囲を調整してください。

  1. 特定の時間範囲内のドキュメントを集計する方法:
db.collection.aggregate([
  {
    $match: {
      timestampField: {
        $gte: ISODate("2022-01-01T00:00:00Z"),
        $lte: ISODate("2022-01-01T23:59:59Z")
      }
    }
  },
  {
    $group: {
      _id: null,
      count: { $sum: 1 }
    }
  }
])

上記の例では、timestampFieldというフィールドが特定の時間範囲内にあるドキュメントをカウントしています。$matchステージで指定した時間範囲を調整してください。

  1. 特定の日付または時間の要素を抽出して集計する方法:
db.collection.aggregate([
  {
    $project: {
      year: { $year: "$dateField" },
      month: { $month: "$dateField" },
      day: { $dayOfMonth: "$dateField" },
      hour: { $hour: "$timestampField" }
    }
  },
  {
    $group: {
      _id: {
        year: "$year",
        month: "$month",
        day: "$day",
        hour: "$hour"
      },
      count: { $sum: 1 }
    }
  }
])

上記の例では、dateFieldから年、月、日の要素を抽出し、timestampFieldから時間の要素を抽出して集計しています。必要に応じて、他の要素も抽出することができます。

これらは一部の一般的な例ですが、MongoDBではさまざまな集計演算子とパイプラインステージを使用して、より高度な時間と日付の集計を行うことができます。詳細については、MongoDBの公式ドキュメントを参照してください。