Java 将MongoDB集合转换为嵌套对象的数组

Java 将MongoDB集合转换为嵌套对象的数组,java,mongodb,spring-boot,mongodb-query,aggregation-framework,Java,Mongodb,Spring Boot,Mongodb Query,Aggregation Framework,我的mongo数据采用以下格式: { country: "Bangladesh", city: "Dhaka", name: "Jobayer", email: "jobayer@gmail.com" } { country: "Bangladesh", city: "Dhaka", name: "Mehotaz", email: "mehotaz

我的mongo数据采用以下格式:

{ country: "Bangladesh", city: "Dhaka", name: "Jobayer", email: "jobayer@gmail.com" }
{ country: "Bangladesh", city: "Dhaka", name: "Mehotaz", email: "mehotaz@gmail.com" }
{ country: "KSA", city: "Dammam", name: "Jabal", email: "jabal@gmail.com" }
我想检索如下所示的数据:

[
    {
        country: 'Bangladesh',
        cities: [
            {
                city: 'Dhaka',
                contacts: [
                    {
                        name: 'Jobayer',
                        email: 'jobayer@gmail.com'
                    },
                    {
                        name: 'Mehotaz',
                        email: 'mehotaz@gmail.com'
                    }
                ]
            }
        ]
    },
    {
        country: 'KSA',
        cities: [
            {
                city: 'Dammam',
                contacts: [
                    {
                        name: 'Jabal',
                        email: 'jabal@gmail.com'
                    }
                ]
            }
        ]
    }
];

我尝试了一些集体行动,但没有得到预期的结果。请就如何实现这一目标提供您宝贵的建议。

您要做的是两次
$group
,一次是在
国家x城市
上,然后是在国家,如下所示:

db.collection.aggregate([
  {
    $group: {
      _id: {
        country: "$country",
        city: "$city"
      },
      contacts: {
        $push: {
          name: "$name",
          email: "$email"
        }
      }
    }
  },
  {
    $group: {
      _id: "$_id.country",
      cities: {
        $push: {
          city: "$_id.city",
          contacts: "$contacts"
        }
      }
    }
  }
])

您要做的是两次
$group
,一次在
国家/地区x城市
上,然后在国家/地区上,如下所示:

db.collection.aggregate([
  {
    $group: {
      _id: {
        country: "$country",
        city: "$city"
      },
      contacts: {
        $push: {
          name: "$name",
          email: "$email"
        }
      }
    }
  },
  {
    $group: {
      _id: "$_id.country",
      cities: {
        $push: {
          city: "$_id.city",
          contacts: "$contacts"
        }
      }
    }
  }
])

非常感谢。很好,非常感谢。它很好用。