Native Aggregation

Erklärung, wie die Bson-Aggregationsstufen des MongoDB-Treibers von der ersten Stufe an ausgeführt werden und wie neue Treiberfunktionen ohne DSL-Neuimplementierung verwendet werden.


Driver-native Root-Aggregation

aggregation() führt die Bson-Stufen, die vom MongoDB-Treiber zurückgegeben werden, in der Reihenfolge der Aufrufreihenfolge ab der ersten Stufe aus. Die DSL implementiert nicht erneut den Treiber-Aggregationsoperator, sondern kümmert sich nur um die Ausführung der Pipeline, das Mapping, den Reactor-Publisher und die Vorschau/Erklärung. Document ist auch Bson, sodass es direkt übergeben werden kann.

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

Ergebnis-Mapping

execute()

Mapping der Ergebnisse auf den Quellentitätstyp.

execute(ResultType.class)

Wenn die Aggregationsergebnisform von der Quellentität abweicht, wird sie in einen separaten Ergebnistyp gemappt.

executeDocument()

Gibt das rohe MongoDB Document unverändert zurück.

$score / $scoreFusion von MongoDB Driver 5.10

1.0.0 erstellt keinen speziellen Wrapper für $score und $scoreFusion. Aggregates.score(...) / Aggregates.scoreFusion(...) des Drivers 5.10 gibt bereits eine Bson-Stage zurück, die direkt an stage(...) übergeben wird.

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

Bson-Stage hinter Search / Vector hinzufügen

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

Die stage(Bson) von Search/Vector kommt direkt nach der obligatorischen ersten Stage $search/$vectorSearch. Funktionen, bei denen die Stage selbst die erste in der Pipeline sein muss, verwenden aggregation().

Aggregation-Publisher-Optionen

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

preview() und das tatsächliche MongoDB explain() werden ebenfalls im Root-Aggregation-Builder unterstützt.

© 2026 Byeolnaerim. Alle Rechte vorbehalten.EinführungDatenschutzrichtlinie