Agregação MongoDB: análise e filtragem de bases de dados
A agregação MongoDB é uma ferramenta valiosa se você deseja analisar ou filtrar suas bases de dados. Este sistema de canalização permite especificar consultas e, portanto, também saídas personalizadas.
O que é a agregação MongoDB?
O MongoDB é uma base de dados orientada para documentos não relacionais, concebida para utilizar grandes quantidades de dados. Ao prescindir de tabelas rígidas e utilizar técnicas como a fragmentação, em que os dados são armazenados em diferentes nós, esta solução NoSQL pode ser escalada horizontalmente sem perder flexibilidade nem proteção contra falhas. Os documentos em formato BSON (binary JSON) são agrupados nas chamadas coleções e podem ser consultados e editados através da linguagem de consulta do MongoDB. Embora essa linguagem ofereça muitas opções, ela não é adequada (ou é insuficiente) para analisar dados. Por isso existe a agregação MongoDB.
Este termo é utilizado para descrever vários processos em informática. Em relação ao MongoDB, agregação significa determinação de informações resumidas. Para isso, os dados de um ou vários documentos são analisados e filtrados com base em determinados fatores definidos. No final deste processo, obtém-se um resultado único e claro. A seguir, não só explicaremos as possibilidades que a agregação no MongoDB oferece para a análise exaustiva de dados, mas também mostraremos como pode utilizar o método aggregate ( ) para o sistema de gestão de bases de dados com um exemplo.
Agregação MongoDB: preparativos e requisitos
Para utilizar a agregação do MongoDB, são necessários apenas alguns pré-requisitos. O método é executado no shell e segue regras lógicas que podem ser ajustadas às suas necessidades individuais. Para isso, o MongoDB já deve estar instalado no seu computador. Explicamos como descarregar, instalar e executar o banco de dados pela primeira vez no nosso tutorial abrangente sobre o MongoDB. Além disso, é recomendável utilizar um firewall potente e configurar a sua base de dados de acordo com os padrões de segurança comuns. Para realizar a agregação no MongoDB, necessitará de permissões de administrador. A base de dados é compatível com várias plataformas, pelo que os passos descritos abaixo se aplicam a todos os sistemas operativos da mesma forma.
O papel do pipeline na agregação do MongoDB
Você também tem a opção de realizar pesquisas ou consultas simples no MongoDB. O banco de dados retornará imediatamente os resultados desejados. No entanto, este método é muito limitado, pois só pode mostrar resultados que já existem nos documentos armazenados. Esta forma de consulta não foi concebida para uma análise mais aprofundada, padrões recorrentes ou informações adicionais. No entanto, às vezes é necessário considerar diferentes fontes dentro de uma base de dados para poder tirar conclusões significativas. Para tais requisitos, utiliza-se a agregação do MongoDB. Para obter um resultado, este método utiliza pipelines.
Qual é a função do pipeline?
Os pipelines de agregação do MongoDB são processos nos quais os dados existentes são analisados e filtrados por meio de várias etapas intermediárias para mostrar aos utilizadores o resultado desejado. Essas etapas intermediárias são conhecidas como fases. Dependendo dos requisitos, pode ser iniciada uma etapa ou várias etapas. Estas são executadas uma após a outra e modificam a entrada original para que, no final, seja apresentado o resultado pretendido. Enquanto a entrada é composta por numerosos dados, a saída, ou seja, o resultado final, é única. A seguir, explicamos as diferentes etapas oferecidas pela agregação do MongoDB.
Qual é a sintaxe dos pipelines de agregação no MongoDB?
Primeiro, é recomendável dar uma breve olhada na sintaxe básica da agregação do MongoDB. O método segue sempre o mesmo esquema, embora possa ser adaptado às suas necessidades específicas. A estrutura básica é a seguinte:
db.collection_name.aggregate ( pipeline, options )shellNeste caso, collecion_name é o nome da coleção considerada. Em pipeline, são enumeradas as etapas necessárias ou desejadas da agregação do MongoDB, e options pode ser utilizado para especificar outros parâmetros opcionais que afetam a saída necessária.
Quais são as etapas existentes?
Existem várias etapas num pipeline de agregação no MongoDB. A maioria delas pode ser utilizada várias vezes dentro do mesmo pipeline. Uma lista completa é muito extensa, principalmente porque algumas são necessárias apenas para operações muito específicas. No entanto, pode ter uma ideia com as etapas mais utilizadas que apresentamos aqui:
$count: fornece uma contagem de quantos documentos BSON foram considerados para a etapa ou etapas neste pipeline.$group: ordena e agrupa os documentos de acordo com determinados parâmetros.$limit: reduz os documentos apresentados.$match: limita os documentos que serão usados para a próxima etapa.$out: os resultados da agregação do MongoDB são incluídos na coleção. Esta etapa só pode ser utilizada no final de um pipeline.$project: seleciona campos específicos de uma coleção.$skip: ignora uma quantidade específica de documentos. Isso é definido por meio de uma opção.$sort: ordena documentos de acordo com um método à sua escolha. No entanto, os documentos não são modificados além disso.$unset: exclui determinados campos e, portanto, funciona como o oposto de $project.
Agregação MongoDB: exemplos práticos
Para entender melhor como a agregação do MongoDB funciona na prática, mostramos alguns exemplos de diferentes etapas e como utilizá-las. Se quiser utilizar a agregação do MongoDB, abra o shell como administrador. Normalmente, primeiro será exibida uma base de dados de teste. Se desejar utilizar outra base de dados, pode usar o comando use.
Para o nosso exemplo, imagine uma base de dados que contém os dados de clientes que compraram um produto específico. Por simplicidade, esta base de dados conterá apenas dez documentos, todos estruturados de acordo com o mesmo esquema. Vamos exemplificar este esquema da seguinte forma:
{
"name" : "Schmidt",
"city" : "Berlin",
"country" : "Germany",
"quantity" : 14
}shellAs informações conhecidas por todos os compradores são, portanto, o nome, o local de residência, o país e o número de produtos adquiridos.
Se quiser experimentar a agregação no MongoDB, use o método insertMany ( ) para adicionar todos os documentos com dados de clientes à coleção “clientes”.
db.clientes.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 }
] )shellSe criar esta entrada desta forma, será apresentada uma lista de diferentes IDs de objetos para cada documento individual.
Como usar $match
Para ilustrar as capacidades de agregação do MongoDB, primeiro aplicaremos a etapa $match à nossa coleção “Clientes”. Sem nenhum outro parâmetro, isso simplesmente nos retornaria a lista completa dos dados dos clientes enumerados anteriormente. No entanto, no exemplo a seguir, instruímos o método a nos mostrar apenas clientes da Itália. O comando correspondente seria este:
db.clientes.aggregate ( [
{ $match : { "country" : "Italy" } }
] )shellA saída agora mostrará apenas os identificadores de objeto e os dados dos dois clientes italianos.
$sort para uma melhor visualização
Se quiser ordenar a sua base de dados de clientes, pode utilizar a agregação no MongoDB com a etapa $sort. No exemplo seguinte, indicamos ao sistema que ordene todos os dados dos clientes de acordo com o número de unidades compradas, começando pelo número mais alto. A entrada apropriada para o nosso exemplo seria a seguinte:
db.clientes.aggregate ( [
{ $sort : { "quantity" : -1 } }
] )shellLimita o resultado com $project
Com as etapas utilizadas até agora, verá que o resultado é bastante extenso. Além das informações reais contidas nos documentos, sempre é incluído o ID do objeto, por exemplo. Com a ajuda de $project, pode determinar quais informações devem ser exibidas no pipeline de agregação do MongoDB. Para isso, definimos o valor 1 para os campos necessários e o valor 0 para os campos desnecessários. No nosso exemplo, queremos ver apenas o nome do cliente e a quantidade de produtos comprados. Portanto, inserimos o seguinte:
db.clientes.aggregate ( [
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
] )shellCombinar várias etapas para a agregação MongoDB
A agregação no MongoDB também oferece sempre a opção de aplicar várias etapas sucessivamente. Estas são executadas uma após a outra e, no final, obtém-se um resultado que leva em consideração todos os parâmetros desejados. Por exemplo, se desejar apenas mostrar os nomes e as compras dos clientes alemães em ordem decrescente, utilize as etapas descritas acima da seguinte forma:
db.clientes.aggregate ( [
{ $match : { "country" : "Germany" } }
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
{ $sort : { "quantity" : -1 } }
] )shell