EventoObtenha 50% de desconto no seu ingresso para MongoDB.local Londres em outubro 2. Use o código WEB50Saiba mais >>
Desenvolvedor MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
MongoDBchevron-right

Introdução ao framework de agregação do MongoDB

Ken W. Alger4 min read • Published Feb 01, 2022 • Updated Sep 23, 2022
MongoDBFramework de agregação
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Início rápido
star-empty
star-empty
star-empty
star-empty
star-empty
Emblema de início rápido BSON
Uma das dificuldades ao armazenar qualquer dado é saber como ele será acessado no futuro. Quais relatórios precisam ser executados nele? Quais informações estão "escondidas" lá dentro que permitirão insights significativos para o seu negócio? Depois de gastar o tempo para projetar seu esquema de dados da maneira apropriada para o aplicativo, é preciso ser capaz de recuperá-lo. No MongoDB, há duas maneiras básicas de recuperação de dados: por meio de queries com o comando find() e por meio de análises usando o framework a de agregação e o comando aggregate().
find() permite a consulta de dados com base em uma condição. É possível filtrar os resultados, fazer transformações básicas de documentos, classificar os documentos, limitar o conjunto de resultados do documento, etc. O comando aggregate() abre as portas para um mundo totalmente novo com o framework de agregação. Nesta série de postagens, analisarei alguns dos motivos pelos quais o uso do framework de agregação é tão poderoso e como aproveitar esse poder.

Por que agregar com o MongoDB?

Uma pergunta frequente é: por que fazer agregação dentro do MongoDB? Da documentação do MongoDB:
Operações de agregação processam registros de dados e retornam resultados calculados. As operações de agregação agrupam valores de vários documentos e podem executar uma variedade de operações nos dados agrupados para retornar um único resultado.
Usando os operadores de agregação internos disponíveis no MongoDB, podemos fazer análises em um cluster de servidores que já estamos usando sem precisar mover os dados para outra plataforma, como Apache Spark ou Hadoop. Embora essas e outras plataformas semelhantes sejam rápidas, a transferência de dados do MongoDB para elas pode ser lenta e potencialmente cara. Usando o framework de agregação, o trabalho é feito dentro do MongoDB e, em seguida, os resultados finais podem ser enviados para o aplicativo, normalmente resultando em uma quantidade menor de dados sendo movidos. Ele também permite a consulta da versão LIVE dos dados e não uma cópia mais antiga dos dados de um lote.
A agregação no MongoDB permite a transformação de dados e resultados de uma forma mais poderosa do que usar o comando find(). Por meio do uso de vários estágios e expressões, você pode criar um "pipeline" de operações em seus dados para executar operações analíticas. O que quero dizer com "pipeline"? O framework de agregação é conceitualmente semelhante ao pipe de linha de comando *nix, |. No pipeline da linha de comando *nix, um pipe transfere a saída padrão para algum outro destino. A saída de um comando é enviada para outro comando para processamento posterior.
exemplo de pipeline *nix
No framework de agregação, pensamos em estágios em vez de comandos. E o estágio "saída" são documentos. Os documentos entram em um estágio, algum trabalho é feito e os documentos são lançados. De lá, eles podem passar para outro estágio ou fornecer resultados.

Estágios de agregação

No momento em que este artigo foi escrito, há vinte e oito diferentes estágios de agregação disponíveis. Esses diferentes estágios fornecem a capacidade de fazer uma ampla variedade de tarefas. Por exemplo, podemos criar um pipeline de agregação que corresponda a um conjunto de documentos com base em um conjunto de critérios, agrupe esses documentos, classifique-os e retorne esse conjunto de resultados para nós.
Exemplo de pipeline de agregação
Ou talvez nosso pipeline seja mais complicado e o documento passe pelo estágio $match, $unwind, $group, $sort, $limit, $project e, finalmente, um estágio $skip.
Isso pode ser confuso e vale a pena repetir alguns desses conceitos. Portanto, vamos analisar isso mais a fundo:
  • Um pipeline começa com documentos
  • Esses documentos vêm de uma coleção, de uma visualização ou de um estágio especialmente projetado
  • Em cada estágio, os documentos entram, o trabalho é feito e os documentos saem
  • Os próprios estágios são definidos usando a sintaxe do documento
Vejamos um exemplo de pipeline. Nossos documentos são dos Dados de amostra que estão disponíveis no MongoDB Atlas e da coleção do routesno banco de dados do sample_training. Aqui está um documento de amostra:
Se você ainda não configurou seu cluster gratuito no MongoDB Atlas, agora é um ótimo momento para fazer isso. Você tem todas as instruções nesta publicação no blog.
Para esta query de exemplo, encontraremos as três principais companhias aéreas que oferecem a maior parte dos voos diretos para fora do aeroporto de Oregon, EUA (PDX). Para começar, criaremos um estágio $match para que possamos nos concentrar em fazer o trabalho apenas nos documentos que atendem a uma base de condições. Nesse caso, procuraremos documentos com um src_airport, ou aeroporto de origem, de PDX e que sejam voos diretos, ou seja, que não tenham escalas.
Isso reduz o número de documentos em nosso pipeline de 66.985 para 113. Em seguida, agruparemos pelo nome da companhia aérea e contaremos o número de voos:
Com a adição do estágio $group, reduzimos para 16 documentos. Vamos classificar aqueles com um estágio $sort e classificar em ordem decrescente:
Em seguida, podemos adicionar um estágio $limit para ter apenas as três principais companhias aéreas que atendem Portland, Oregon:
Depois de colocar os documentos na coleção sample_training.routes por esse pipeline de agregação, nossos resultados nos mostram que as três principais companhias aéreas que oferecem voos sem escalas partindo de PDX são Alaska, American e United Airlines, com 39, 17 e 13 voos, respectivamente.
Como isso fica no código? É bastante simples usar a função db.aggregate(). Por exemplo, no Python você faria algo como:
O código de agregação também é bem semelhante em outras linguagens.

Embrulhar

O framework de agregação do MongoDB é um conjunto extremamente poderoso de ferramentas. O processamento é feito no próprio servidor, o que resulta em menos dados enviados pela rede. No exemplo usado aqui, em vez de extrair todos os documentos para um aplicativo e processá-los lá, o framework de agregação permite que apenas os três documentos que queremos de nossa query sejam enviados de volta para o aplicativo.
Esta foi apenas uma breve introdução a alguns dos operadores disponíveis. Ao longo desta série, examinarei mais de perto alguns dos operadores de framework de agregação mais populares, bem como alguns interessantes, mas menos usados. Também examinarei as considerações de desempenho do uso do framework de agregação.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Início rápido
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Enriquecimento de documentos e atualizações de esquemas


Aug 13, 2024 | 2 min read
Tutorial

Introdução à paginação de dados com o Quarkus e o MongoDB: um tutorial abrangente


Apr 25, 2024 | 7 min read
Artigo

Inúmeras coleções


Jun 12, 2024 | 6 min read
Início rápido

Pipeline de agregação Java


Mar 01, 2024 | 8 min read
Sumário
  • Por que agregar com o MongoDB?