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

MongoDB聚合查询如何从fields与values映射数组中提取指定字段值

问题原因

你当前的写法直接将完整的values数组推入结果集合,没有根据fields数组和目标字段的映射关系提取对应位置的数值,因此输出不符合预期。

正确聚合实现

你需要在分组前先计算目标字段在fields数组中的索引,再提取values数组对应索引位置的数值,完整语句如下:

return await Metric.aggregate([
  {
    $match: matches,
  },
  { $sort: { _id: 1 } },
  // 计算目标字段在fields数组中的索引
  {
    $addFields: {
      targetIndex: { $indexOfArray: ['$fields', params.field] }
    }
  },
  // 可选:过滤掉不存在目标字段的无效文档
  {
    $match: {
      targetIndex: { $ne: -1 }
    }
  },
  {
    $group: {
      _id: params.field,
      // 仅推入values数组对应索引的数值
      values: { $push: { $arrayElemAt: ['$values', '$targetIndex'] } }
    }
  }
]);

逻辑说明

  • $indexOfArray操作符可以返回指定字段在fields数组中的位置索引,目标字段不存在时返回-1
  • $arrayElemAt操作符可以根据索引从values数组中取出对应位置的数值
  • 分组阶段仅推入提取到的单值,而非整个values数组,最终输出结构和你预期完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:15:03