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

如何正确解析含多级数组的MongoDB字段并提取参数求和

问题原因

你第二次$unwind返回null的核心原因是cities字段为对象类型,而$unwind运算符仅支持对数组类型字段做展开操作,直接作用于对象无法得到预期结果。

解决方法

先将cities对象转换为数组,再做后续提取、求和操作即可,完整聚合管道参考如下:

db.collection.aggregate([
  // 此处为你已经完成的第一次$unwind操作,后续步骤接在原有管道之后
  // 1. 将cities对象转换为键值对数组,格式为[{k: "城市名", v: {param1, param2}}]
  {
    $addFields: {
      city_list: { $objectToArray: "$cities" }
    }
  },
  // 2. 展开转换后的城市数组
  {
    $unwind: "$city_list"
  },
  // 3. 提取所需字段,格式化输出结构
  {
    $project: {
      _id: 0,
      account_id: 1,
      param1: "$city_list.v.param1",
      param2: "$city_list.v.param2"
    }
  },
  // 4. 对param1和param2求和,如需按account_id分组求和,把_id改为"$account_id"即可
  {
    $group: {
      _id: null,
      total_param1: { $sum: "$param1" },
      total_param2: { $sum: "$param2" },
      // 如需保留所有明细数据可添加下面一行
      details: { $push: "$$ROOT" }
    }
  }
])

按你给出的测试数据运行后,total_param1结果为12,total_param2结果为11,符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:45:03