MongoDB查询:如何同时获取min、max与distinct年份计数?
MongoDB聚合实现min(year)、max(year)和count(distinct year)
要实现你需要的SQL等效功能,有两种可行的聚合写法,优先推荐第一种(性能更优):
方法一:先去重再统计
db.database.aggregate([ // 按year分组去重,只保留每个年份的唯一记录 { $group: { _id: "$year" } }, // 对去重后的年份做聚合统计 { $group: { _id: {}, "min(year)": { $min: "$_id" }, "max(year)": { $max: "$_id" }, "count(distinct year)": { $sum: 1 } }} ])
第一阶段通过$group将相同年份的行合并,只保留每个年份的唯一标识;第二阶段基于这些去重后的年份,用$min/$max取极值,$sum:1统计去重后的年份总数,完全对应SQL里的count(distinct year)。
方法二:用数组存去重值再取长度
如果数据量不大,也可以用$addToSet结合$size实现:
db.database.aggregate([ { $group: { _id: {}, "min(year)": { $min: "$year" }, "max(year)": { $max: "$year" }, distinctYears: { $addToSet: "$year" } }}, { $project: { _id: 0, "min(year)": 1, "max(year)": 1, "count(distinct year)": { $size: "$distinctYears" } }} ])
第一阶段把所有不重复的年份存入distinctYears数组,第二阶段用$size获取数组长度得到去重年份数。但如果唯一年份数量很多,这种方法会占用更多内存,不建议大数据量场景使用。
内容的提问来源于stack exchange,提问作者timothy
相关产品推荐
相关产品推荐

