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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:05:31