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

如何在MongoDB中获取出现频次最低的字段值并提取版本数字?

MongoDB获取字段频次最低值(含带前缀版本处理)

核心实现思路

通过MongoDB聚合框架,分四步完成:提取纯数字版本号、分组统计频次、按频次升序排序、取频次最低的第一条数据。

完整聚合代码示例

假设目标集合为your_collection,目标字段为version:

db.your_collection.aggregate([
  // 1. 提取纯数字版本号,兼容带前缀的情况(如'alpha 1.0.8'提取为'1.0.8')
  {
    $addFields: {
      cleanVersion: {
        $ifNull: [
          { $arrayElemAt: [{ $regexFind: { input: "$version", regex: /\d+(\.\d+)*$/ } }, 0] },
          "$version" // 无匹配时保留原字段值
        ]
      }
    }
  },
  // 2. 按清洗后的版本号分组,统计出现次数
  {
    $group: {
      _id: "$cleanVersion",
      count: { $sum: 1 }
    }
  },
  // 3. 按出现次数升序排序,次数相同时可按版本号排序(可选)
  {
    $sort: { count: 1, _id: 1 }
  },
  // 4. 取排序后的第一条,即为频次最低的版本
  {
    $limit: 1
  },
  // 可选:格式化输出字段,提升可读性
  {
    $project: {
      _id: 0,
      leastFrequentVersion: "$_id",
      occurrenceCount: "$count"
    }
  }
])

代码说明

  • 提取纯数字版本:使用$regexFind配合正则/\d+(\.\d+)*$/,匹配字段末尾的数字版本部分(支持1、1.0.8等格式),自动忽略前缀内容。$ifNull用于处理无匹配的异常情况,保留原字段值。
  • 分组统计:按清洗后的版本号分组,用$sum:1累计每个版本的出现次数。
  • 排序取最小:按count升序排序后,$limit:1直接获取频次最低的版本。
  • 格式化输出:通过$project重命名字段,让结果更直观。

示例结果

针对问题中的示例2,执行后会返回:

{ "leastFrequentVersion": "1.0.8", "occurrenceCount": 7 }

内容的提问来源于stack exchange,提问作者WhatTheClown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:20:30