如何在MongoDB中按月份对数据进行分组?
MongoDB按月份(英文全称)分组查询方案
你可以使用MongoDB的聚合框架实现按月份分组的需求,具体查询语句如下:
db.your_collection_name.aggregate([ // 新增月份数字和英文全称字段,用于分组和排序 { $addFields: { monthNum: { $month: "$date" }, monthName: { $dateToString: { format: "%B", date: "$date" } } } }, // 按月份全称分组,收集对应数据到data数组 { $group: { _id: "$monthName", monthNum: { $first: "$monthNum" }, data: { $push: { _id: "$_id", userId: "$userId", gameType: "$gameType", score: "$score", winningPosition: "$winningPosition", winningAmount: "$winningAmount", date: "$date", userName: "$userName" } } } }, // 按月份数字倒序,让较新的月份排在前面 { $sort: { monthNum: -1 } }, // 调整输出结构,符合需求格式 { $project: { _id: 0, month: "$_id", data: 1 } } ])
语句说明:
- $addFields阶段:从
date字段提取月份数字(monthNum)和英文全称(monthName),前者用于后续排序,后者作为分组依据。 - $group阶段:以
monthName为分组键,将每个分组内的原始文档(排除新增的临时字段)收集到data数组中,同时保留monthNum用于排序。 - $sort阶段:按
monthNum降序排列,确保十月(10)排在九月(9)之前。 - $project阶段:重命名分组键为
month,移除默认的_id字段,输出目标结构。
注意:将语句中的your_collection_name替换为你的实际集合名称。
内容的提问来源于stack exchange,提问作者Vishambar Pandey
相关产品推荐
相关产品推荐

