汇总复杂对象

时间:2018-07-27 20:50:20

标签: mongodb mongodb-query

我有一个包含以下文档的集合:

{
  "towers": [
    {
      "name": "foo",
      "towers": [
        {
          "name": "A",
          "buildType": "Apartament"
        },
        {
          "name": "B",
          "buildType": "Apartament"
        }
      ]
    },
    {
      "name": "xpto",
      "towers": [
        {
          "name": "C",
          "buildType": "House"
        },
        {
          "name": "D",
          "buildType": "Office"
        }
      ]
    }
  ]
}

我需要知道的是“ buildType”的所有可能值是什么,例如:

  • 公寓
  • 房屋
  • 办公室

这是一个复杂的对象,要聚合的数据很深。有什么方法可以达到我想要的结果?

2 个答案:

答案 0 :(得分:1)

您需要$unwind两个嵌套的数组,即“ towers”和“ towers.towers”,然后将$group与“ towers.towers.buildType”字段一起使用以获取不同的值

db.collection.aggregate([
  { "$unwind": "$towers" },
  { "$unwind": "$towers.towers" },
  { "$group": {
    "_id": "$towers.towers.buildType"
  }}
])

输出

[
  {
    "_id": "Office"
  },
  {
    "_id": "House"
  },
  {
    "_id": "Apartament"
  }
]

答案 1 :(得分:0)

db.collection.aggregate(

    // Pipeline
    [
        // Stage 1
        {
            $unwind: {
                path: "$towers",

            }
        },

        // Stage 2
        {
            $unwind: {
                path: "$towers.towers",
            }
        },

        // Stage 3
        {
            $group: {
                _id: '$_id',
                buildType: {
                    $addToSet: '$towers.towers.buildType'
                }
            }
        },

    ]



);