Preview & Explain
실행 전 DSL query/pipeline을 확인하는 preview와 실제 MongoDB execution plan을 요청하는 explain의 차이를 설명합니다.
preview()
preview()는 MongoDB에 query를 실행하지 않고 현재 DSL이 만들 query/pipeline을 진단용 Document로 렌더링합니다. 실제 execution plan이 아니라 build 결과를 확인하는 API입니다.
java
Mono<Document> preview = dsl
.executeEntity(User.class, MongoTemplateName.FRONT)
.fields(pair("status", "ACTIVE"))
.end()
.findAll()
.paging(0, 20)
.sorts(sort -> sort.desc("id"))
.preview();• classic findAll, find, count, exists, distinct
• root aggregation()
• Atlas Search findAll/find/count/existsQuery
• Vector Search findAll/find/count/existsQuery
explain()
explain()은 실제 MongoDB Driver explain operation을 실행하므로 database connection이 필요합니다.
java
Mono<Document> explain = dsl
.executeEntity(User.class, MongoTemplateName.FRONT)
.fields(pair("status", "ACTIVE"))
.end()
.findAll()
.explain(ExplainVerbosity.EXECUTION_STATS);Driver의 QUERY_PLANNER, EXECUTION_STATS, ALL_PLANS_EXECUTIONS 등 ExplainVerbosity 값을 그대로 전달할 수 있습니다.
Search / Vector에서도 동일하게 사용
java
Mono<Document> searchPreview = dsl
.executeEntity(Article.class, key)
.search("articles_default")
.text(text -> text.path("title").query("mongodb"))
.findAll()
.preview();
Mono<Document> vectorExplain = dsl
.executeEntity(Article.class, key)
.vectorSearch("articles_vector_index")
.path("embedding")
.queryVector(embedding)
.limit(20)
.approximate(200)
.findAll()
.explain();