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

MongoDB中如何查询字段最大/最小值并关联对应的唯一userId

你当前的$group只能返回极值本身,无法关联对应userId的核心原因是$min/$max聚合运算符仅返回字段值,不会保留该值对应的文档其他属性。你需要先把所有待统计的指标拆分为独立文档,再按指标维度分组取极值关联的userId,完整聚合逻辑如下:

完整聚合管道代码

const pipeline = [
  // 步骤1:把6个待统计指标构造成数组,每条带指标名、值、对应userId
  {
    "$addFields": {
      "metrics": [
        {"key": "r1t1", "value": "$r1.t1", "userId": "$userId"},
        {"key": "r1t2", "value": "$r1.t2", "userId": "$userId"},
        {"key": "r2t1", "value": "$r2.t1", "userId": "$userId"},
        {"key": "r2t2", "value": "$r2.t2", "userId": "$userId"},
        {"key": "r1eff", "value": "$r1.efficiency", "userId": "$userId"},
        {"key": "r2eff", "value": "$r2.efficiency", "userId": "$userId"}
      ]
    }
  },
  // 步骤2:把数组拆分为独立文档,每个文档对应一个指标的单条记录
  {"$unwind": "$metrics"},
  // 步骤3:生成排序权重,效率类指标按值倒序,其余按值正序
  {
    "$set": {
      "sortWeight": {
        "$cond": {
          "if": {"$regexMatch": {"input": "$metrics.key", "regex": /eff$/}},
          "then": {"$multiply": ["$metrics.value", -1]},
          "else": "$metrics.value"
        }
      }
    }
  },
  // 步骤4:按排序权重正序排列,确保每个指标的目标极值排在最前
  {"$sort": {"sortWeight": 1}},
  // 步骤5:按指标名分组,取排在最前的记录即为目标极值关联的信息
  {
    "$group": {
      "_id": "$metrics.key",
      "userId": {"$first": "$metrics.userId"},
      "value": {"$first": "$metrics.value"}
    }
  },
  // 可选步骤:调整输出格式匹配你的预期
  {
    "$project": {
      "_id": 0,
      "userId": 1,
      "$_id": "$value"
    }
  }
]

执行结果说明

执行上述管道后会返回6条文档,每条对应一个极值和关联的userId,如果需要合并为单个对象,可以在最后追加$group阶段把所有文档合并即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:18:04