MongoDB Aggregation: Analisar e filtrar banco de dados

MongoDB Aggregation é uma ferramenta valiosa a todos que desejam analisar ou filtrar bancos de dados. Seu pipeline de agregação permite a realização de consultas complexas e, consequentemente, a obtenção de resultados finais específicos.

O que é MongoDB Aggregation?

MongoDB é um banco de dados não relacional e orientado a documentos, projetado para lidar com grandes volumes e diferentes tipos de dados. Ao dispensar tabelas rígidas e utilizar técnicas de sharding, que armazenam dados em diferentes nós, essa solução NoSQL pode ser escalada horizontalmente, sem que perca sua flexibilidade e aumente o risco de falhas. Seus documentos, que possuem o formato BSON (JSON binário), são agrupados em coleções e podem ser consultados e manipulados com pela MongoDB Query Language, linguagem de programação própria. Embora essa linguagem seja adequada a diferentes usos, ela não é suficiente para realizar análises de dados. Justamente por isso, o MongoDB Aggregation existe.

No contexto de tecnologia da informação (TI), aggretation (agregação, em português) diz respeito à obtenção de informações consolidadas. Portanto, o MongoDB Aggregation analisa e filtra um ou vários documentos armazenados pelo banco de dados, com base em fatores predefinidos, apresentando, ao final do processo, um resultado claro e específico. Neste tutorial, exploraremos não somente as diversas possibilidades de análise que o MongoDB Aggregation oferece, mas também mostraremos como você pode usar o método aggregate() no sistema de gerenciamento de banco de dados (DMBS) com diferentes exemplos.

O que fazer para começar a usar o MongoDB Aggregation?

Para fazer uso do MongoDB Aggregation, você precisa se atentar a algumas condições: o método deve ser executado no shell e operar de acordo com regras lógicas, que podem ser ser adaptadas para corresponder às suas necessidades individuais. Antes de começar, instale o MongoDB no seu computador — aprenda a baixar, instalar e executar este banco de dados com o nosso tutorial introdutório sobre MongoDB. Além disso, recomendamos que você configure um firewall robusto e que ajuste o seu banco de dados de acordo com os padrões de segurança adotados. Para realizar processos de agregação no MongoDB, você também precisará de privilégios de administrador.

Dica

O banco de dados MongoDB é compatível com as mais diversas plataformas, por isso os passos descritos a seguir podem ser realizados em qualquer sistema operacional.

O que é pipeline de agregação no MongoDB?

No MongoDB, existe a possibilidade de se realizar pesquisas e consultas simples. Nesses casos, o banco de dados é capaz de fornecer os resultados esperados de imediato. No entanto, esse método “tradicional” é bastante limitado, pois só consegue exibir resultados que já existem nos documentos armazenados. Para uma análise mais profunda, contendo padrões recorrentes ou informações adicionais, esse tipo de consulta não funciona. Então, o que fazer quando se precisa considerar diferentes fontes dentro de um banco de dados para a obtenção de resultados individuais? Usar a ferramenta MongoDB Aggregation, que retorna resultados específicos após realizar uma sequência de estágios, chamada de pipeline de agregação.

Quais são as funções do pipeline de agregação?

Pipeline de agregação no MongoDB é o processo que analisa e filtra os dados existentes no banco de dados, ao realizar uma sequência de estágios (stages) intermediários. Somente assim o resultado desejado pode ser retornado. Ainda, a depender dos requisitos, um ou mais estágios podem ser iniciados. Eles são executados sequencialmente, a fim de transformar a entrada original no resultado final desejado, que será apresentado após a execução do último estágio. Enquanto os documentos de entrada são compostos por diferentes dados, o resultado final é específico.

Acompanhe diferentes estágios que podem ser aplicados no MongoDB Aggregation.

Qual é a sintaxe do pipeline de agregação?

Antes de apresentarmos os nossos exemplos de aplicação de estágios, destacamos a estrutura básica do MongoDB Aggregation. O método segue sempre o mesmo esquema, que pode ser adaptado para atender a necessidades específicas. Esta é a sintaxe do MongoDB Aggregation:

db.collection_name.aggregate ( pipeline, options )
shell

Aqui, collection_name faz referência ao nome da coleção a ser analisada. Sob pipeline devem ser listados os estágios necessários para a obtenção do resultado desejado. Por sua vez, options dizem respeito a parâmetros adicionais, que podem ser usados para especificar a saída.

Quais são os estágios do pipeline de agregação?

Um pipeline de agregação, no MongoDB Aggregation, executa diferentes estágios, mas não somente isso: a maioria deles pode ser executada várias vezes dentro do mesmo pipeline.

Apesar de a lista abaixo não conter todos os estágios de agregação possíveis — que são inúmeros — reunimos, para você, os mais comumente utilizados:

  • $count: Com esse estágio, você obtém um valor que indica quantos documentos BSON foram considerados para o(s) estágio(s) do respectivo pipeline.
  • $group: Esse estágio classifica e agrupa documentos com base em determinados parâmetros.
  • $limit: Com esse estágio, você limita os documentos exibidos.
  • $match: Com esse estágio, você limita os documentos que a serem considerados pelo próximo estágio.
  • $out: Com esse estágio, os resultados obtidos pelo processo de agregação são inseridos na coleção — este estágio deve ser sempre o estágio final de um pipeline.
  • $project: Com esse estágio, você consegue selecionar campos específicos de uma coleção.
  • $skip: Esse estágio ignora um número específico de documentos, que pode ser definido nas opções.
  • $sort: Com esse estágio, você ordena os documentos de acordo com o método que escolheu. No entanto, ele não realiza nenhuma outra modificação.
  • $unset: Esse estágio exclui campos específicos, agindo como o oposto de $project.

Exemplos de uso do MongoDB Aggregation

Para que você entenda melhor como funciona o MongoDB Aggregation na prática, elaboramos alguns exemplos que processam diferentes estágios e também explicam o funcionamento destes. Para começar a usar o MongoDB Aggregation, inicie o shell com direitos de administrador. Provavelmente, um banco de dados para testes será exibido inicialmente. Para acessar outro banco de dados, execute o comando use.

O nosso exemplo diz respeito a um banco de dados com informações sobre clientes que compraram um produto específico. Este banco de dados contém dez documentos, que seguem todos o mesmo esquema:

{
	"name" : "Schmidt",
	"city" : "Berlin",
	"country" : "Germany",
	"quantity" : 14
}
shell

As informações sobre cada comprador são as seguintes: nome, cidade, país e quantidade de produtos adquiridos.

Para aplicarmos a ferramenta MongoDB Aggregation neste banco de dados, fizemos uso do método insertMany(). Ele adicionará todos os documentos com dados de clientes à coleção “clients” (clientes):

db.clients.insertMany ( [
	{ "name" : "Schmidt", "city" : "Berlin", "country" : "Germany", "quantity" : 14 },
	{ "name" : "Meyer", "city" : "Hamburg", "country" : "Germany", "quantity" : 26 },
	{ "name" : "Lee", "city" : "Birmingham", "country" : "England", "quantity" : 5 },
	{ "name" : "Rodriguez", "city" : "Madrid", "country" : "Spain", "quantity" : 19 },
	{ "name" : "Nowak", "city" : "Krakow", "country" : "Poland", "quantity" : 13 },
{ "name" : "Rossi", "city" : "Milano", "country" : "Italy", "quantity" : 10 },
{ "name" : "Arslan", "city" : "Ankara", "country" : "Turkey", "quantity" : 18 },
{ "name" : "Martin", "city" : "Lyon", "country" : "France", "quantity" : 9 },
{ "name" : "Mancini", "city" : "Rome", "country" : "Italy", "quantity" : 21 },
{ "name" : "Schulz", "city" : "Munich", "country" : "Germany", "quantity" : 2 }
] )
shell

Ao executarmos essa entrada, obtemos como resultado uma lista com os IDs dos objetos de cada documento individual.

Como usar $match para filtrar documentos

Para explorar diferentes possibilidades do MongoDB Aggregation, aplicamos $match à nossa coleção “clients”, no primeiro estágio de agregação. Se optássemos por não inserir nenhum parâmetro adicional, obteríamos a lista completa de dados dos clientes mencionados. Neste exemplo de código, contudo, instruímos o método a considerar somente os clientes da Itália:

db.clientes.aggregate ( [
	{ $match : { "country" : "Italy" } }
] )
shell

Nesse caso, o resultado final exibirá somente os IDs dos objetos e os dados dos dois clientes italianos.

Como usar $sort para ordenar documentos

Você também pode usar o MongoDB Aggregation para ordenar o seu banco de dados, executando o estágio $sort. No exemplo a seguir, instruímos o nosso banco de dados a ordenar todos os dados de clientes baseando-se na quantidade de unidades compradas, do maior para o menor número. Assim ficou a nossa entrada:

db.clientes.aggregate ( [
	{ $sort : { "quantity" : -1 } }
] )
shell

Como usar $project para selecionar campos

Nos estágios até então aplicados, obtivemos resultados relativamente extenso. Além das informações contidas pelos documentos, os IDs dos objetos também foram exibidos pelo resultado final, por exemplo. Contudo, com o estágio $project, é possível determinar as informações que devem ser exibidas pelo pipeline de agregação. Assim, atribuímos valor 1 para os campos necessários e valor 0 para os campos desnecessários. No exemplo abaixo, desejamos que somente o nome do cliente e a quantidade de produtos comprados sejam exibidos. Para isso, executamos o seguinte comando:

db.clientes.aggregate ( [
	{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
] )
shell

Como combinar estágios no MongoDB Aggregation

O MongoDB Aggregation também permite que vários estágios sejam executados em sequência. Ao ocorrerem sequencialmente, eles apresentam um resultado final que abrange todos os parâmetros estabelecidos. Para obtermos apenas os nomes e as compras dos clientes alemães e em ordem decrescente, aplicamos os três estágios descritos anteriormente da seguinte maneira:

db.clientes.aggregate ( [
	{ $match : { "country" : "Germany" } }
	{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
	{ $sort : { "quantity" : -1 } }
] )
shell
Dica

Quer aprender ainda mais sobre MongoDB? O nosso Digital Guide ajuda você nessa empreitada. Aprenda como listar bancos de dados no MongoDB e como ordenar documentos no MongoDB com o operador sort.

Este artigo foi útil?
Para melhorar a sua experiência, este site usa cookies. Ao acessar o nosso site, você concorda com nosso uso de cookies. Mais informações
Page top