我该如何哄骗Spring Data向我展示mongo的查询计划(aka cursor.explain())

sot*_*ron 4 spring jersey mongodb spring-data

我正在用Spring / Mongo / Jersey编写一个API,以便在具有通用属性映射的POJO上执行CRUD:

public class Thing {
    private String id;

    @Indexed
    private Map<String,String> properties;
...
Run Code Online (Sandbox Code Playgroud)

这很适合退货。我的资源代码如下所示:

BasicDBObject query = new BasicDBObject("properties.name", "vlad the impaler");
return Response.ok(myService.queryThings(query)).build();
Run Code Online (Sandbox Code Playgroud)

我的抽象DAO看起来像这样:

public List<T> find(Query query) {
        return mongoOps.find(query, clazzOfItem);
}
Run Code Online (Sandbox Code Playgroud)

我无法确定的是@Indexed注释是否有效。我想尝试解释一下,(http://docs.mongodb.org/manual/reference/method/cursor.explain/),但我没有看到任何示例向我展示如何从spring数据调用较低级别的驱动程序API。

我希望能够像这样打开调试:

public List<T> find(Query query) {
        if (debugOn) {
            String queryPathDetails = mongoOps.executeCommand( /*NOW WHAT??*/ ).toString();
            logger.log(queryPathDetails);
        }
        return mongoOps.find(query, clazzOfItem);
}
Run Code Online (Sandbox Code Playgroud)

您能提供的任何帮助将不胜感激!

Tho*_*ont 5

我们尚不提供支持,但是您可以在此处简单地设置一个断点 org.springframework.data.mongodb.core.MongoTemplate.QueryCursorPreparer.prepare(..)

在您选择的调试器中,您只需执行一个

cursor.explain()
Run Code Online (Sandbox Code Playgroud)

例如通过日食显示视图。