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

MongoDB如何根据alreadyRead字段计算完成平均值并新增avgCompleted字段

MongoDB计算课程单元已读占比实现方案

以下两种方案可实现为每条文档新增avgCompleted已读占比字段的需求:

方案1:查询时动态返回字段(无需修改原有数据)

适合临时查询、不需要持久化存储字段的场景,使用聚合管道的$addFields阶段实时计算占比:

db.yourCollectionName.aggregate([
  {
    $addFields: {
      avgCompleted: {
        $round: [
          {
            $multiply: [
              { $divide: [ { $sum: "$units.alreadyRead" }, { $size: "$units" } ] },
              100
            ]
          }
        ]
      }
    }
  }
])
  • 计算逻辑:$sum: "$units.alreadyRead"累加所有已读单元数量,$size: "$units"获取单元总数量,两者相除后乘以100得到百分比,最后通过$round取整为整数,和你给出的示例输出完全匹配。
  • 注意将代码中的yourCollectionName替换为你实际使用的集合名称。

方案2:永久更新文档写入avgCompleted字段

如果需要将计算结果持久化保存到集合中,可使用updateMany配合聚合管道实现(要求MongoDB版本≥4.2):

db.yourCollectionName.updateMany(
  {}, // 此处可填写过滤条件,为空代表匹配所有文档
  [
    {
      $set: {
        avgCompleted: {
          $round: [
            {
              $multiply: [
                { $divide: [ { $sum: "$units.alreadyRead" }, { $size: "$units" } ] },
                100
              ]
            }
          ]
        }
      }
    }
  ]
)

执行后所有文档都会新增avgCompleted字段,后续更新units数组时可按需重新执行该语句更新字段值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:48:01