Agrégation native

Explique comment exécuter les étapes d'agrégation Bson du pilote MongoDB depuis la première étape sans réimplémenter les nouvelles fonctionnalités du pilote dans le DSL.


Agrégation racine native au pilote

aggregation() exécute les étapes Bson retournées par le pilote MongoDB dans l'ordre d'appel depuis la première étape. Le DSL ne réimplémente pas l'opérateur d'agrégation du pilote, mais gère l'exécution du pipeline, le mapping, le publisher Reactor et la connexion preview/explain. Document étant également Bson, il peut être transmis directement.

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();

Mapping des résultats

execute()

Mappez les résultats au type d'entité source.

exécuter(ResultType.class)

Lorsque la forme du résultat d'agrégation diffère de celle de l'entité source, elle est mappée à un type de résultat distinct.

executeDocument()

Retourne le Document brut de MongoDB tel quel.

$score / $scoreFusion du pilote MongoDB 5.10

1.0.0 ne crée pas de wrapper dédié pour $score et $scoreFusion. Aggregates.score(...) / Aggregates.scoreFusion(...) du pilote 5.10 renvoie déjà un stage Bson, donc il est directement transmis à 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();

Ajouter un stage Bson aprè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();

Le stage(Bson) de Search/Vector se place juste après le stage obligatoire $search/$vectorSearch. Les fonctionnalités comme $scoreFusion, qui doivent être le premier stage du pipeline, utilisent aggregation().

Options de publication d'agrégation

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

preview() et le véritable explain() de MongoDB sont également pris en charge dans le constructeur d'agrégation racine.

© 2026 Byeolnaerim. Tous droits réservés.PrésentationPolitique de confidentialité