预览与解释

解释预览和实际 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();
© 2026 Byeolnaerim. 保留所有权利.介绍隐私政策