Preview & Explain
実行前にDSLクエリ/パイプラインを確認するプレビューと、実際のMongoDB実行計画を要求する説明の違いを説明します。
preview()
preview() はMongoDBにクエリを実行せず、現在のDSLが生成するクエリ/パイプラインを診断用の Document としてレンダリングします。実際の実行計画ではなく、ビルド結果を確認する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();• クラシック findAll, find, count, exists, distinct
• ルート aggregation()
• Atlas Search findAll/find/count/existsQuery
• ベクトル検索 findAll/find/count/existsQuery
explain()
explain() は実際のMongoDB Driverの説明操作を実行するため、データベース接続が必要です。
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();