MongoDB Pipeline de Agregação

Um exemplo prático de uso do Aggregation Pipeline

Julio Isaac
3 min readDec 9, 2020

Performance, buscas complexas, unir documentos, agrupar dados, essas são só as principais vantagens de se utilizar o Aggregation Framework do MongoDB.

O Aggregation Framework é um grupo de ferramentas analíticas do MongoDB, que executa operações de análises, relatórios/consultas em documentos de ao menos uma collection. Essencialmente, as operações processam os registros dos dados e retornam os resultados computados. O MongoDB conta com três maneiras de implementar agregação: Métodos de Agregação de Propósito Único; Map-Reduce e Pipeline de Agregação.

Neste artigo será apresentado um caso de uso real onde implementamos na prática a forma Pipeline de Agregação.

Para mais informações sobre o MongoDB Aggregation Framework acesse a documentação.

Pipeline de Agregação

Como o próprio nome já diz, esta forma de implementar agregação baseia-se no conceito de pipeline. Significa que o processo de execução passa por estágios pré-definidos antes de retornar o resultado final. É importante ressaltar que a ordem desses estágios é relevante, pois o documento de saída de cada estágio se torna o documento de entrada do estágio consecutivo.

Fluxo para um possível Pipeline de Agregação

Exemplo prático

O exemplo a seguir é uma task backend implementada para um aplicativo. Apresentarei uma breve descrição de uma das regras de negócios implementadas, assim como o modelo da estrutura de dados no MongoDB. Em seguida, trechos dos códigos da solução.

Regra de negócio: buscar ofertas por proximidade

Considerar apenas ofertas de estabelecimentos em um raio de 10km. Filtrá-las de acordo com as seguintes condições: flag ativo ‘true’, com status ‘ativada’ e dentro do prazo de vigência. Agrupá-las por estabelecimento. Ordená-las por distância do usuário. Paginar usando valor parametrizado. Por fim, retornar os grupos de ofertas.

Modelo de dados

Modelo de oferta no MongoDB

Query Aggregate

Inicialmente criei uma query com todos os estágios descritos na regra de negócio com finalidade de testar a possível solução.

Query Aggregation Pipeline

Execução do teste da pipeline de agregação citado

Teste executando a pipeline com collection com quase 25.000 registros (Obs.: Tempo de execução no canto inferior direito)

Implementação da solução

A implementação foi feita usando Java, pois já era a linguagem usada no backend do aplicativo. Utilizamos mongo-java-driver para abstrair conexões e recursos do MongoDB.

Classe responsável pelas queries genéricas com MongoDB
Classe implementada para possivéis reutilizações dos filtros criados
Método responsável pela criação, execução e resultado da Pipeline de Agregação

Conclusão

Este artigo é um caso de uso prático que resolve um problema específico, mas vale lembrar que a ferramenta (Aggregation Framework/AF) com suas formas de implementação servem para resolver diversos tipos de problemas, dos mais simples aos complexos.
É importante frisar que o sistema de queries tradicional do MongoDB não atenderia a tarefa exemplificada no artigo, pela complexidade descrita nas regras.
Com base no que foi apresentado constatamos que o uso da Pipeline de Agregação nos mostrou ser muito útil, atendendo as expectativas esperadas ao resolver um problema real. A grande vantagem no uso da ferramenta foi a performance.
Como mostrado, o Aggregation Framework nos permitiu implementar de forma rápida uma busca complexa, ordenando e agrupando dados e tendo resultados performáticos.

Dúvidas, críticas, sugestões… deixe um comentário :)

--

--

Julio Isaac
0 Followers

Software Engineer | Full Stack Engineer experience in Java, Golang, Node, React*, Python at @gruposbf