Группируйте документы в mongodb через вложенные уровни - PullRequest
0 голосов
/ 20 ноября 2018

В рассмотрении коллекции у нас есть следующие документы с matchQuery {oid: somex}:

[{
     _id: id1,
     parentid:ParentId1,
     somefields:<some values>
},
{
     _id: id2,
     parentid:ParentId1,
     somefields:<some values>
},
{
     _id: id3,
     parentid:ParentId2,
     somefields:<some values>
},
{
     _id: id4,
     parentid:ParentId3,
     somefields:<some values>
},
{
     _id: id5,
     parentid:id1,
     somefields:<some values>
},
{
     _id: id6,
     parentid: id1,
     somefields:<some values>
},
{
     _id: id7,
     parentid: id2,
     somefields:<some values>
},
{
     _id: id8,
     parentid: id3,
     somefields:<some values>
},
{
     _id: id9,
     parentid: id3,
     somefields:<some values>
},
{
     _id: id10,
     parentid: id4,
     somefields:<some values>
},
{
     _id: id11,
     parentid: id5,
     somefields:<some values>
},
{
     _id: id12,
     parentid: id5,
     somefields:<some values>
},
{
     _id: id13,
     parentid: id5,
     somefields:<some values>
},
{
     _id: id14,
     parentid: id13,
     somefields:<some values>
},
{
     _id: id15,
     parentid: id13,
     somefields:<some values>
},
]

Я могу достичь этого только на одном уровне, используя следующий агрегированный запрос:

db.random.aggregate([ { $match:{oid:"somex"}},{$group:{ _id:'$parentid', result: { $push: "$$ROOT" } } }]).toArray()

Таким образом, он выводится как плоская группировка на основе парентиды.Также группировка результатов только с parentId и его ближайшими дочерними документами.Я хочу также получить поля родительских документов, в идеале все поля родительского документа.

Поэтому я хочу сгруппировать его и получить как можно больше вложенного:

[{
         _id: id1,
         parentid:ParentId1,
         somefields:<some values>,
         children: [{
                     _id: id5,
                     parentid:id1,
                     somefields:<some values>,
                     children:[{
                                 _id: id11,
                                 parentid: id5,
                                 somefields:<some values>
                            },
                            {
                                 _id: id12,
                                 parentid: id5,
                                 somefields:<some values>
                            },
                            {
                                 _id: id13,
                                 parentid: id5,
                                 somefields:<some values>,
                                 children: [{
                                             _id: id14,
                                             parentid: id13,
                                             somefields:<some values>
                                        },
                                        {
                                             _id: id15,
                                             parentid: id13,
                                             somefields:<some values>
                                        }]
                            }]
                },
                {
                     _id: id6,
                     parentid: id1,
                     somefields:<some values>
                }]
    },
    {
         _id: id2,
         parentid:ParentId1,
         somefields:<some values>,
         children: [{
                     _id: id7,
                     parentid: id2,
                     somefields:<some values>
                }]
    },
    {
         _id: id3,
         parentid:ParentId2,
         somefields:<some values>,
         children: [{
                     _id: id8,
                     parentid: id3,
                     somefields:<some values>
                },
                {
                     _id: id9,
                     parentid: id3,
                     somefields:<some values>
                }]
    },
    {
         _id: id4,
         parentid:ParentId3,
         somefields:<some values>,
         children:[{
                     _id: id10,
                     parentid: id4,
                     somefields:<some values>
                }]
    }
    ]

Может кто-нибудьпредложить мне совокупный запрос для достижения ожидаемого результата?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...