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.
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(...).
.aggregation()
.stage(Aggregates.score("$rating"))
.executeDocument();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
.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
.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.