Agregasi Native

Menjelaskan cara menjalankan tahap agregasi Bson dari MongoDB Driver dari langkah pertama tanpa mengimplementasikan ulang fitur Driver baru dalam DSL.


agregasi root native Driver

aggregation() menjalankan tahap Bson yang dikembalikan oleh MongoDB Driver dari urutan panggilan tahap pertama. DSL tidak mengimplementasikan ulang operator agregasi Driver, hanya bertanggung jawab untuk menjalankan pipeline, pemetaan, penerbit Reactor, dan menghubungkan preview/explain. Document juga merupakan Bson, sehingga dapat disampaikan langsung.

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

pemetaan hasil

execute()

Memetakan hasil ke tipe entitas sumber.

eksekusi(ResultType.class)

Jika bentuk hasil agregasi berbeda dari entitas sumber, akan dipetakan ke tipe hasil terpisah.

eksekusiDokumen()

Mengembalikan Document MongoDB mentah apa adanya.

$score / $scoreFusion dari Driver MongoDB 5.10

1.0.0 tidak membuat wrapper khusus untuk $score dan $scoreFusion. Aggregates.score(...) / Aggregates.scoreFusion(...) dari Driver 5.10 sudah mengembalikan stage Bson, jadi langsung diteruskan ke 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();

Tambahkan stage Bson setelah 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();

stage(Bson) dari Search/Vector masuk setelah $search/$vectorSearch yang merupakan stage pertama yang wajib. Fitur yang harus menjadi stage pertama dalam pipeline seperti $scoreFusion menggunakan aggregation().

Opsi penerbit agregasi

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

preview() dan explain() MongoDB yang sebenarnya juga didukung di root aggregation builder.

© 2026 Byeolnaerim. Semua hak dilindungi.PengenalanKebijakan Penanganan Data Pribadi