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

如何编写MongoDB聚合管道,同时返回过滤文档及平均值统计

MongoDB聚合管道实现方案

可以通过$facet阶段同时实现过滤文档列表和计算平均值的需求,以下是具体的聚合管道代码:

db.collection.aggregate([
  // 筛选出A > 100的文档
  {
    $match: {
      A: { $gt: 100 }
    }
  },
  // 并行执行两个子管道,分别获取文档列表和平均值
  {
    $facet: {
      // 子管道1:返回过滤后的完整文档列表(可通过$project调整返回字段)
      filtered_docs: [],
      // 子管道2:计算符合条件文档的A字段平均值
      avg_value: [
        {
          $group: {
            _id: null,
            average_A: { $avg: "$A" }
          }
        },
        { $project: { _id: 0 } }
      ]
    }
  },
  // 将平均值数组转为单个对象(可选,优化结果结构)
  {
    $addFields: {
      avg_value: { $arrayElemAt: ["$avg_value", 0] }
    }
  }
])

结果示例

执行后返回的结构如下:

{
  "filtered_docs": [
    { "_id": ObjectId("xxx"), "A": 120 },
    { "_id": ObjectId("yyy"), "A": 150 },
    // ... 其他符合条件的文档
  ],
  "avg_value": { "average_A": 135 }
}

步骤说明

  • $match:先过滤出符合A > 100条件的文档,减少后续计算的数据量。
  • $facet:支持在同一管道中并行处理多个子任务,分别生成文档列表和平均值统计结果。
  • $arrayElemAt:由于$group返回的是数组格式的结果,用该操作符提取出单个平均值对象,让结果更直观。

若不需要优化平均值的结构,可省略最后一步的$addFields,此时avg_value会是包含单个对象的数组。

内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:55:13