如何从MongoDB数据中按日期统计每个唯一字段的对应数量
MongoDB按月份统计各科目出现次数方案
你可以直接使用MongoDB的聚合管道完成该统计需求,完整查询语句如下:
// 请将集合名student替换为你实际的学生集合名称 db.student.aggregate([ // 按月份+科目双维度分组,统计每个科目在对应月份的出现次数 { $group: { _id: { Date: "$Date", Subject: "$Subject" }, count: { $sum: 1 } } }, // 按月份收拢同月份的所有科目统计数据 { $group: { _id: "$_id.Date", subjectKV: { $push: { k: "$_id.Subject", v: "$count" } } } }, // 格式化输出为要求的结构 { $project: { _id: 0, // 如果存储的Date本身为数字类型,可删除$toInt转换逻辑 Date: { $toInt: "$_id" }, Subject: { $arrayToObject: "$subjectKV" } } }, // 可选:按月份升序排列结果 { $sort: { Date: 1 } } ])
方案说明:
- 首次分组以
日期+科目作为分组条件,先计算出每个科目在对应月份的总出现次数 - 二次分组以
日期作为唯一分组条件,将同一月份的所有科目和对应计数整理为键值对数组 - 最后通过
$arrayToObject操作符将键值对数组转为要求的嵌套对象格式,同时调整输出字段的类型和结构
注意:
$arrayToObject为MongoDB 3.4.4版本新增的操作符,如果你使用的版本低于该版本,可以直接取二次分组的结果在应用层做格式转换即可。
内容的提问来源于stack exchange,提问作者Lineesh Mb
相关产品推荐
相关产品推荐

