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

Posted

技术标签:

【中文标题】将 MongoDB 集合转换为嵌套对象数组【英文标题】:Convert MongoDB Collection to Array of Nested Object 【发布时间】: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'
                    
                ]
            
        ]
    
];

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于将 MongoDB 集合转换为嵌套对象数组的主要内容,如果未能解决你的问题,请参考以下文章

将对象数组转换为虚拟 mongodb 集合

将对象数组转换为mongodb中的字符串数组

流星mongodb用_id插入一个嵌套的对象数组

将对象数组插入 MongoDB

将平面对象数组转换为嵌套对象数组[重复]

Mongodb多层嵌套数组如何精确查询(内容处为格式化的json截图,评论里面是json的内容)?