Thursday, 4 May 2017

How to rearrange the hierarchy of $group result document in mongodb aggregate

I have this document below:

    [
{
_id: "Lei 13.105, de 16 de março de 2015",
artigo: [
{
titulo: "Art. 73",
uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}"
},
{
titulo: "§ 1º",
uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}-paragrafo{1}"
},
{
titulo: "I",
uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}-paragrafo{1}-inciso{1}"
},
{
titulo: "II",
uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}-paragrafo{1}-inciso{2}"
},
{
titulo: "III",
uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}-paragrafo{1}-inciso{3}"
},
{
titulo: "IV",
uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}-paragrafo{1}-inciso{4}"
},
{
titulo: "§ 2º",
uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}-paragrafo{2}"
},
{
titulo: "§ 3º",
uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}-paragrafo{3}"
}
]
}
]

It was generated by this code:

collection.aggregate([
        {$match: { 'titulo': { '$regex' : leiReq } } },
        {'$unwind': '$fragments'},
        {$match: { 'fragments.uuid': artigoPattern}},
        { $group : {
            _id: '$titulo',
            artigo: {
                $push: {
                    titulo: "$fragments.titulo",
                    uuid: "$fragments.uuid"
                    }
                }
            }
    }

But my final goal is create a hierarchy based on uuid, like this:

    [
  {
    _id: "Lei 13.105, de 16 de março de 2015",
    artigo: [
      {
        titulo: "Art. 73",
        uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}",
        paragrafo: [
          {
            titulo: "§ 1º",
            uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}-paragrafo{1}",
            incisos: [
              {
                titulo: "I",
                uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}-paragrafo{1}-inciso{1}"
              },
              {
                titulo: "II",
                uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}-paragrafo{1}-inciso{2}"
              },
              {
                titulo: "III",
                uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}-paragrafo{1}-inciso{3}"
              },
              {
                titulo: "IV",
                uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}-paragrafo{1}-inciso{4}"
              }
            ]
          },
          {
            titulo: "§ 2º",
            uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}-paragrafo{2}",
            incisos: []
          },
          {
            titulo: "§ 3º",
            uuid: "parte{geral}-livro{3}-titulo{1}-capitulo{1}-artigo{73}-paragrafo{3}",
            incisos: []
          }
        ]
      }
    ]
  }
]

In other words, i want the 'artigo 73' have your own 'paragrafos' and each 'paragrafos' your owns 'incisos'.

I have no ideia how to do this, please help!



via Rafael Akiyoshi

No comments:

Post a Comment