Agregação Nativa

Explica como executar o estágio de agregação Bson do Driver MongoDB desde o primeiro estágio e usar novas funcionalidades do Driver sem reimplementação no DSL.


Agregação raiz nativa do Driver

aggregation() executa os estágios Bson retornados pelo Driver MongoDB na ordem em que são chamados desde o primeiro estágio. O DSL não reimplementa o operador de agregação do Driver, apenas gerencia a execução do pipeline, mapeamento, publicador Reactor e conexão de preview/explain. Document também é Bson, portanto pode ser passado diretamente.

java
Flux<User> result = dsl
    .executeEntity(User.class, MongoTemplateName.FRONT)
    .aggregation()
    .stage(Aggregates.match(Filters.eq("status", "ACTIVE")))
    .stage(Aggregates.sort(Sorts.descending("createdAt")))
    .stage(Aggregates.limit(20))
    .execute();

mapeamento de resultados

execute()

mapeia os resultados para o tipo de entidade de origem.

execute(ResultType.class)

Mapeia para um tipo de resultado separado quando a forma do resultado da agregação é diferente da entidade de origem.

executeDocument()

Retorna o Document bruto do MongoDB.

$score / $scoreFusion do Driver MongoDB 5.10

1.0.0 não cria um wrapper exclusivo para $score e $scoreFusion. O Aggregates.score(...) / Aggregates.scoreFusion(...) do Driver 5.10 já retorna um estágio Bson, que é passado diretamente para stage(...).

java
.aggregation()
.stage(Aggregates.score("$rating"))
.executeDocument();
java
Bson searchStage = Aggregates.search(
    SearchOperator.text(SearchPath.fieldPath("title"), "mongodb"),
    SearchOptions.searchOptions().index("search-index")
);

Bson vectorStage = Aggregates.vectorSearch(
    SearchPath.fieldPath("embedding"),
    List.of(0.1D, 0.2D, 0.3D),
    "vector-index",
    10L,
    VectorSearchOptions.exactVectorSearchOptions()
);

Flux<Document> result = dsl
    .executeEntity(User.class, MongoTemplateName.FRONT)
    .aggregation()
    .stage(
        Aggregates.scoreFusion(
            List.of(
                FusionPipeline.of("text", searchStage),
                FusionPipeline.of("vector", vectorStage)
            ),
            ScoreNormalization.SIGMOID
        )
    )
    .executeDocument();

Adicionar estágio Bson após Search / Vector

java
.search("search-index")
.text(text -> text.path("title").query("mongodb"))
.stage(Aggregates.score("$rating"))
.findAll()
.execute();

.vectorSearch("vector-index")
.path("embedding")
.queryVector(vector)
.limit(20)
.exact()
.stage(Aggregates.score("$rating"))
.findAll()
.execute();

O stage(Bson) do Search/Vector entra logo após o estágio obrigatório $search/$vectorSearch. Funcionalidades que exigem que o estágio em si seja o primeiro do pipeline, como $scoreFusion, usam aggregation().

Opções do publicador de agregação

java
.aggregation()
.readPreference(ReadPreference.secondaryPreferred())
.isAllowDiskUse(true)
.customizeAggregation(publisher -> publisher.batchSize(500))

preview() e o explain() real do MongoDB também são suportados no construtor de agregação raiz.

© 2026 Byeolnaerim. Todos os direitos reservados.IntroduçãoPolítica de Privacidade