You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB按日期、星期、小时分组统计记录的查询方案求助

MongoDB按日期、星期、小时分组统计的正确查询语句

问题原因

报错MongoServerError: PlanExecutor error during aggregation :: caused by :: $dateToString parameter 'date' must be coercible to date(中文翻译:MongoServerError: 聚合过程中PlanExecutor错误 :: 原因 :: $dateToString参数'date'必须可转换为日期类型),是因为集合中的date字段存储的是字符串类型,而$dateToString要求输入是MongoDB的Date类型,需先将字符串转换为日期对象。

正确查询语句

1. 按日期(年月日)分组统计

db.collection.aggregate([
  { $match: { "d": "656dbcda6c773c4374b0b125", "b": "656e5e346c773c4374b0b14b" } },
  {
    $addFields: {
      dateObj: { $dateFromString: { dateString: "$date", format: "%Y-%m-%d %H:%M:%S" } }
    }
  },
  {
    $group: {
      _id: { $dateToString: { format: "%Y-%m-%d", date: "$dateObj" } },
      count: { $sum: 1 }
    }
  },
  { $sort: { _id: 1 } } // 可选,按日期顺序排序
])

输出示例:

[ { "_id": "2023-12-05", "count": 2 } ]

2. 按星期(周一至周日)分组统计

db.collection.aggregate([
  { $match: { "d": "656dbcda6c773c4374b0b125", "b": "656e5e346c773c4374b0b14b" } },
  {
    $addFields: {
      weekday: { $dayOfWeek: { $dateFromString: { dateString: "$date", format: "%Y-%m-%d %H:%M:%S" } } }
    }
  },
  {
    $group: {
      _id: {
        $switch: {
          branches: [
            { case: { $eq: ["$weekday", 1] }, then: "周日" },
            { case: { $eq: ["$weekday", 2] }, then: "周一" },
            { case: { $eq: ["$weekday", 3] }, then: "周二" },
            { case: { $eq: ["$weekday", 4] }, then: "周三" },
            { case: { $eq: ["$weekday", 5] }, then: "周四" },
            { case: { $eq: ["$weekday", 6] }, then: "周五" },
            { case: { $eq: ["$weekday", 7] }, then: "周六" }
          ]
        }
      },
      count: { $sum: 1 }
    }
  },
  { $sort: { _id: 1 } } // 可选,按星期顺序排序
])

输出示例:

[ { "_id": "周二", "count": 2 } ] // 2023-12-05为周二

3. 按小时(1-24)分组统计

db.collection.aggregate([
  { $match: { "d": "656dbcda6c773c4374b0b125", "b": "656e5e346c773c4374b0b14b" } },
  {
    $addFields: {
      hour: { $hour: { $dateFromString: { dateString: "$date", format: "%Y-%m-%d %H:%M:%S" } } }
    }
  },
  {
    $group: {
      _id: { $concat: [ { $toString: "$hour" }, "时" ] },
      count: { $sum: 1 }
    }
  },
  { $sort: { _id: 1 } } // 可选,按小时顺序排序
])

输出示例:

[ { "_id": "10时", "count": 2 } ]

补充说明

  • 若后续插入数据,建议直接将date字段存储为MongoDB的Date类型,避免每次查询都需转换,提升性能。
  • $dateFromString的format参数需与存储的字符串日期格式完全匹配,此处为%Y-%m-%d %H:%M:%S,格式不同需对应调整。

内容的提问来源于stack exchange,提问作者MDL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:12:28