解析一个困难的 MongoDB 字段(使用多级数组)

Parsing a difficult MongoDB field (with multi-level array)

专家您好,

我正在尝试解析 MongoDB 集合行,在使用 $unwind 之后, 其余字段之一如下所示:

[
    {
        "account_id": "1234",
        "cities": {
            "cityname1": {
                "param1": 1,
                "param2": 2
            }
        }
    },
    {
        "account_id": "2345",
        "cities": {
            "cityname2": {
                "param1": 3,
                "param2": 3
            }
        }
    },
    {
        "account_id": "3456",
        "cities": {
            "cityname3": {
                "param1": 8,
                "param2": 6
            }
        }
    }
]

现在,我想继续解析这个字段,所以我可以为 account_idparam1param2 提取 fieldname/value,希望之后总结 param1param2 值。 但是,当我尝试使用第二个 $unwind 时,我收到那些具有“空”值的字段。

我该如何正确解析这个字段?

  • $set 使用 $objectToArray
  • 将城市更改为数组
  • $unwind 展开城市数组
  • $group 按 account_id 和 cityname 分组然后总结 param1 和 param2 (只能按account_id或城市名分组,去掉其中一个即可)

汇总

db.collection.aggregate([
  {
    "$set": {
      cities: {
        "$objectToArray": "$cities"
      }
    }
  },
  {
    "$unwind": "$cities"
  },
  {
    "$group": {
      "_id": {
        account_id: "$account_id",
        "cityname": "$cities.k"
      },
      "sumOfParam1": {
        "$sum": "$cities.v.param1"
      },
      "sumOfParam2": {
        "$sum": "$cities.v.param2"
      }
    }
  }
])

mongoplayground