如何在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
相关产品推荐
相关产品推荐

