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

如何在MongoDB中根据sensorId计算并新增multiplied_consumption字段

MongoDB 字段计算与新增解决方案

你可以通过 MongoDB 的聚合查询或文档更新操作实现需求,以下是两种实用方法:

方法一:聚合查询(仅返回计算结果,不修改原文档)

利用 $project 阶段转换对象格式并匹配计算,适合临时查看结果:

db.collection.aggregate([
  {
    $project: {
      metadata: 1,
      data: 1,
      coef: 1,
      multiplied_consumption: {
        $multiply: [
          "$data.consumption",
          {
            $getField: {
              field: "v",
              input: {
                $first: {
                  $filter: {
                    input: { $objectToArray: "$coef" },
                    cond: { $eq: ["$$this.k", "$metadata.sensorId"] }
                  }
                }
              }
            }
          }
        ]
      }
    }
  }
])

方法二:更新文档(永久新增字段)

如果需要直接修改原文档,使用聚合管道式更新批量处理:

db.collection.updateMany(
  {}, // 此处可添加筛选条件,空对象匹配所有文档
  [
    {
      $set: {
        multiplied_consumption: {
          $multiply: [
            "$data.consumption",
            {
              $getField: {
                field: "v",
                input: {
                  $first: {
                    $filter: {
                      input: { $objectToArray: "$coef" },
                      cond: { $eq: ["$$this.k", "$metadata.sensorId"] }
                    }
                  }
                }
              }
            }
          ]
        }
      }
    }
  ]
)

核心逻辑说明

  • $objectToArray:将 coef 对象转为 [{k: "传感器ID", v: 系数}, ...] 的数组格式,便于匹配
  • $filter:从数组中筛选出与 metadata.sensorId 对应的元素
  • $first:取筛选结果的第一个元素(每个传感器ID在 coef 中唯一)
  • $getField:提取元素中的系数值(v)
  • $multiply:将 data.consumption 与系数相乘得到最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:57:39