การรวมแบบ Native
อธิบายวิธีการเรียกใช้ Bson aggregation stage ของ MongoDB Driver ตั้งแต่ขั้นตอนแรกโดยไม่ต้องใช้ฟังก์ชันใหม่ของ Driver ในการสร้าง DSL ใหม่.
การรวมแบบ Driver-native root
aggregation() จะเรียกใช้ Bson stage ที่ส่งคืนโดย MongoDB Driver ตั้งแต่ขั้นตอนแรกตามลำดับการเรียกใช้ DSL จะไม่ทำการสร้างใหม่ของ Driver aggregation operator แต่จะรับผิดชอบการดำเนินการ pipeline, mapping, Reactor publisher, การเชื่อมต่อ preview/explain Document ก็เป็น Bson ดังนั้นสามารถส่งต่อได้โดยตรง.
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 ผลลัพธ์
execute()
ทำการ mapping ผลลัพธ์เป็นประเภท entity source.
execute(ResultType.class)
เมื่อรูปแบบผลลัพธ์การรวมไม่ตรงกับเอนทิตีต้นทาง จะทำการแมพไปยังประเภทผลลัพธ์แยกต่างหาก
executeDocument()
คืนค่า Document ของ MongoDB แบบดิบโดยตรง
$score / $scoreFusion ของ MongoDB Driver 5.10
1.0.0 จะไม่สร้าง wrapper เฉพาะสำหรับ $score และ $scoreFusion เนื่องจาก Aggregates.score(...) / Aggregates.scoreFusion(...) ของ Driver 5.10 จะคืนค่า Bson stage อยู่แล้ว จึงส่งต่อไปยัง 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();เพิ่ม Bson stage หลังจาก 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();stage(Bson) ของ Search/Vector จะอยู่หลัง $search/$vectorSearch ซึ่งเป็น stage แรกที่จำเป็น $scoreFusion เป็นฟีเจอร์ที่ต้องการให้ stage เองเป็นขั้นตอนแรกใน pipeline ใช้ aggregation()
ตัวเลือกผู้เผยแพร่การรวม
.aggregation()
.readPreference(ReadPreference.secondaryPreferred())
.isAllowDiskUse(true)
.customizeAggregation(publisher -> publisher.batchSize(500))preview() และ explain() ของ MongoDB จริงก็รองรับใน root aggregation builder ด้วย