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
Idiomaschevron-right
Javachevron-right

Pipeline de agregação Java

Maxime Beugnet8 min read • Published Feb 01, 2022 • Updated Mar 01, 2024
MongoDBFramework de agregaçãoJava
Í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

Atualizações

O repositório de início rápido do MongoDB Java está disponível no GitHub.

28 de fevereiro de 2024

  • Atualizar para o Java 21
  • Atualize o driver Java para 5.0.0
  • Atualize logback-classic para 1.2.13

14 de novembro de 2023

  • Atualizar para o Java 17
  • Atualize o driver Java para 4.11.1
  • Atualize o mongodb-crypt para 1.8.0

25 de março de 2021

  • Atualize o driver Java para 4.2.2.
  • Exemplo de criptografia no nível do campo do lado do cliente adicionado.

21 de outubro de 2020

  • 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ção logback.xml.

O que é o aggregation pipeline?

Emblema do Java
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.

Configuração

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.

Primeiro exemplo com zíperes

No Conjunto dedados de amostrado MongoDB no MongoDB Atlas, vamos explorar um pouco a coleção zipsno 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 guiaCollections .
Depois de fazer isso, você pode exportar seu pipeline para Java usando o botão Exportar.
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 $match para filtrar meus documentos e manter apenas o código postal no Texas,
  • Um estágio $group para reagrupar meus códigos postais nas cidades,
  • Um estágio $project para renomear o campo _id em city para uma saída limpa (não obrigatório, mas sou elegante),
  • Um estágio $sort para classificar por população decrescente,
  • Um estágio $limit para manter apenas as 3 cidades mais populosas.
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.

Segundo exemplo com publicações

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.
Aqui estou usando o estágio $unwindmuito útil para quebrar minha array de tags.
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.

Código final

Encerrando

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.
Na próxima postagem do blog, explicarei a você os Change Streams em Java.

Í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

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


Apr 25, 2024 | 7 min read
Tutorial

Crie uma Java REST API com Quarkus e Eclipse JNoSQL para MongoDB


Jan 30, 2024 | 6 min read
Tutorial

Como Migrar PostgreSQL para MongoDB com Confluent Kafka


Aug 30, 2024 | 10 min read
Tutorial

Como migrar do Realm Java SDK para o Realm Kotlin SDK


May 09, 2022 | 5 min read
Sumário