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

如何在MongoDB中查询数据并按年份分组展示?

MongoDB按date字段中的年份分组展示数据

针对你需要按date字段的年份分组展示数据的需求,因为你的date字段是字符串类型(包含"YYYY-MM-DD"或"YYYY-M-DD"格式),可以通过MongoDB的聚合管道实现,以下是具体方案:

针对字符串类型的date字段

使用$split分割日期字符串提取年份,再按年份分组:

db.yourCollectionName.aggregate([
  {
    $group: {
      // 提取date字段中的年份作为分组键
      _id: { $arrayElemAt: [{$split: ["$date", "-"]}, 0] },
      // 将同一年的所有文档存入records数组
      records: { $push: "$$ROOT" }
    }
  },
  // 可选:按年份升序排列结果
  { $sort: { _id: 1 } }
])

代码解释

  • $split: ["$date", "-"]:将date字符串按-分割为数组,比如"2023-1-11"会被分割成["2023", "1", "11"]
  • $arrayElemAt: [..., 0]:取分割后数组的第一个元素,也就是年份
  • $push: "$$ROOT":把当前分组下的完整文档添加到records数组中
  • $sort:可选步骤,让结果按年份从小到大排列

若date字段为MongoDB Date类型

如果后续将date字段转换为MongoDB原生的Date类型,可以直接使用$year操作符提取年份:

db.yourCollectionName.aggregate([
  {
    $group: {
      _id: { $year: "$date" },
      records: { $push: "$$ROOT" }
    }
  },
  { $sort: { _id: 1 } }
])

查询结果示例

执行上述查询后,会得到按年份分组的结果,结构如下:

[
  {
    "_id": "2021",
    "records": [
      {"id": "103", "userName": "Swim", "date": "2021-11-14"},
      {"id": "104", "userName": "Piter", "date": "2021-06-21"},
      {"id": "105", "userName": "yogo", "date": "2021-10-05"}
    ]
  },
  {
    "_id": "2023",
    "records": [
      {"id": "101", "userName": "John", "date": "2023-03-20"},
      {"id": "102", "userName": "Deo", "date": "2023-01-11"},
      {"id": "102", "userName": "Yeh", "date": "2023-1-11"}
    ]
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:52:56