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

MongoDB技术求助:计算接通等待时长<60秒的通话占比

MongoDB聚合查询:计算短等待时长接通通话占比

需求说明

MongoDB集合包含callDirection、status、duration、billsec字段,需要完成:

  • 筛选出接通等待时长(duration - billsec)小于60秒的通话;
  • 计算这类通话在所有status为ANSWERED的已接通通话中的占比。

解决思路

  1. 前置过滤:先筛选出所有status等于ANSWERED的通话,缩小计算范围;
  2. 分组统计:在分组阶段同时统计两个关键数值:
    • 已接通通话的总数量;
    • 等待时长小于60秒的通话数量;
  3. 计算占比:通过投影阶段,用短等待时长的数量除以已接通总数得到占比。

完整聚合查询代码

db.collection.aggregate([
  // 第一步:过滤出所有已接通的通话
  {
    $match: {
      status: "ANSWERED"
    }
  },
  // 第二步:分组统计总数和符合条件的数量
  {
    $group: {
      _id: 0,
      totalAnswered: { $sum: 1 },
      shortWaitCount: {
        $sum: {
          $cond: [
            { $lt: [ { $subtract: [ "$duration", "$billsec" ] }, 60 ] },
            1,
            0
          ]
        }
      }
    }
  },
  // 第三步:计算占比,保留两位小数优化可读性
  {
    $project: {
      _id: 0,
      totalAnswered: 1,
      shortWaitCount: 1,
      shortWaitRatio: {
        $round: [ { $divide: [ "$shortWaitCount", "$totalAnswered" ] }, 2 ]
      }
    }
  }
])

代码说明

  • $match阶段:只保留status为ANSWERED的文档,减少后续计算的数据量;
  • $group阶段:
    • totalAnswered:统计所有已接通通话的总数;
    • shortWaitCount:用$cond判断duration - billsec是否小于60,符合条件则累加1;
  • $project阶段:用$divide计算占比,$round将结果保留两位小数,方便查看。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:12:14