Pipeline de agregação Java
Maxime Beugnet8 min read • Published Feb 01, 2022 • Updated Mar 01, 2024
Avalie esse Início rápido
- Atualizar para o Java 21
- Atualize o driver Java para 5.0.0
- Atualize
logback-classic
para 1.2.13
- Atualizar para o Java 17
- Atualize o driver Java para 4.11.1
- Atualize o mongodb-crypt para 1.8.0
- Atualize o driver Java para 4.2.2.
- Exemplo de criptografia no nível do campo do lado do cliente adicionado.
- Atualize o driver Java para 4.1.1.
- O registro do driver Java agora está ativado por meio da popular APIJ SLF4, portanto, adicionei logback no
pom.xml
e um arquivo de configuraçãologback.xml
.
O aggregation pipeline é uma framework para agregação de dados modelada sobre o conceito de pipelines de processamento de dados, assim como o "pipe" no Linux Shell. Os documentos entram em um pipeline em vários estágios que transforma os documentos em resultados agregados.
É a maneira mais poderosa de trabalhar com seus dados no MongoDB. Ele nos permitirá fazer queries avançadas, como agrupar documentos, manipular arrays, remodelar modelos de documentos etc.
Vamos ver como podemos coletar esse poder usando Java.
Usarei o mesmo repositório de sempre nesta série. Se você ainda não tiver uma cópia dele, poderá cloná-lo ou apenas atualizá-lo, caso já o tenha:
Se você não configurou seu cluster gratuito no MongoDB Atlas, agora é um ótimo momento para fazê-lo. Você tem todas as instruções nesta postagem do blog.
No Conjunto dedados de amostrado MongoDB no MongoDB Atlas, vamos explorar um pouco a coleção
zips
no banco de dadossample_training
.Como você pode ver, temos um documento para cada código postal nos EUA e, para cada um, temos a população associada.
Para calcular a população de Nova York, eu teria que somar a população de cada código postal para obter a população de toda a cidade.
Vamos tentar encontrar as 3 maiores cidades do estado do Texas. Vamos projetar isso no papel primeiro.
- Não preciso trabalhar com a collection inteira. Preciso filtrar apenas as cidades do Texas.
- Uma vez feito isso, posso reagrupar todos os códigos postais de uma mesma cidade para obter a população total.
- Então, posso ordenar minhas cidades por ordem decrescente ou população.
- Finalmente, posso manter as primeiras 3 cidades da minha lista.
A maneira mais fácil de construir este pipeline no MongoDB é usar o construtor de pipeline de agregação que está disponível no MongoDB Compass ou no MongoDB Atlas na guia
Collections
.Após uma pequena refatoração de código, aqui está o que eu tenho:
O driver do MongoDB oferece muitos ajudantes para tornar o código fácil de escrever e ler.
Como você pode ver, resolvi esse problema com:
- Um estágio $project para renomear o campo
_id
emcity
para uma saída limpa (não obrigatório, mas sou elegante),
Esta é a saída que obtemos:
No MongoDB 4.2, existem 30 diferentes aggregation pipeline stages que você pode usar para manipular seus documentos. Se você quiser saber mais, recomendamos que siga este curso na MongoDB University: M121: The MongoDB Aggregation Framework.
Desta vez, estou usando a collection
posts
no mesmo banco de dados.Esta coleção de postagens 500 foi gerada artificialmente, mas contém matrizes e quero mostrar como podemos manipular matrizes em um pipeline.
Vamos tentar encontrar as três tags mais populares e, para cada tag, também quero a lista de títulos de postagens que eles estão marcando.
Aqui está a minha solução em Java.
Ele me permite no estágio $group seguinte agrupar minhas marcações, contar as postagens e coletar os títulos em uma nova array
titles
.Aqui está o resultado final que obtive.
Como você pode ver, alguns títulos são repetidos. Como eu disse anteriormente, a coleção foi gerada então os títulos das postagens não são únicos. Eu poderia resolver esse "problema" usando o operador $addToSet em vez do operador$push se isso fosse realmente um problema.
O pipeline de agregação é muito poderoso. Acabamos de começar com esses dois exemplos, mas confie em mim se eu disser que é seu melhor aliado se você conseguir dominá-lo.
Encorajo você a seguir o curso M121 na MongoDB University para se tornar um jedi de pipeline de agregação.
Se você quiser aprender mais e afundar seu conhecimento com mais rapidez, recomendamos que você confira o treinamento M220J: MongoDB para programadores Java disponível gratuitamente na MongoDB University.