【问题标题】:Convert MongoDB Collection to Array of Nested Object将 MongoDB 集合转换为嵌套对象数组
【发布时间】:2021-07-07 07:12:40
【问题描述】:

我的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'
                    }
                ]
            }
        ]
    }
];

我尝试了一些分组操作,但无法获得预期的结果。请就我如何实现这一目标提出宝贵的建议。

【问题讨论】:

    标签: java mongodb spring-boot mongodb-query aggregation-framework


    【解决方案1】:

    你想做的是两次$group,一次是country x city,然后是国家,就像这样:

    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"
            }
          }
        }
      }
    ])
    

    Mongo Playground

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 2015-03-26
      • 2019-01-31
      • 1970-01-01
      相关资源
      最近更新 更多