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();
© 2026 Byeolnaerim. All rights reserved.소개개인정보처리방침