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

MongoDB聚合:如何获取字段数组并计算sessionDuration平均值

解决方案

一、获取sessionDuration字段的数组

要把所有文档的sessionDuration值收集到一个数组中,可使用聚合框架的$group阶段配合$push操作符实现:

db.yourCollectionName.aggregate([
  {
    $group: {
      _id: null, // 按null分组将所有文档归为同一组
      durationsArr: { $push: "$sessionDuration" } // 将每个文档的sessionDuration推入数组
    }
  }
])

执行后返回结果格式如下:

{
  "_id": null,
  "durationsArr": [29, 45, 25]
}

关键说明:

  • _id: null是核心设置,确保所有文档被合并到同一个分组,才能收集全量的sessionDuration值。
  • $push操作符会逐个将指定字段的值添加到目标数组中。

二、更优的平均值计算方案

先存数组再算平均值的方法可行,但直接用$avg操作符一步计算平均值性能更优,尤其在数据量较大时,能避免数组存储带来的额外内存开销:

直接计算平均值的聚合管道

db.yourCollectionName.aggregate([
  {
    $group: {
      _id: null,
      averageSessionDuration: { $avg: "$sessionDuration" } // 实时计算所有sessionDuration的平均值
    }
  }
])

执行后结果示例:

{
  "_id": null,
  "averageSessionDuration": 33 // (29+45+25)/3 = 33
}

优势解析:

  • 内存效率更高:无需在内存中存储所有sessionDuration值的数组,MongoDB会在分组过程中实时累加计算,占用内存更少。
  • 执行速度更快:省去了数组存储和后续遍历计算的步骤,一步完成统计。

如果需要同时获取数组和平均值,也可在同一个$group阶段中完成:

db.yourCollectionName.aggregate([
  {
    $group: {
      _id: null,
      durationsArr: { $push: "$sessionDuration" },
      averageSessionDuration: { $avg: "$sessionDuration" }
    }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:35:20