预览与解释
解释预览和实际 MongoDB 执行计划之间的区别,前者用于检查 DSL 查询/管道,后者用于请求执行计划。
预览()
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() 执行实际的 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 值。
搜索/向量也同样使用
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();