MongoDB Compass Shell中explain()不显示queryPlanner/winningPlan求助
解决MongoDB explain()无法获取winningPlan和rejectedPlans的问题
你之前的写法db.collection.find({...}).explain.queryPlanner存在语法错误——.explain()是需要执行的方法,不能直接链式访问属性,这是导致无返回的核心原因。以下是几种正确查看目标字段的方法:
方法1:正确链式调用explain()并访问字段
先执行explain()方法,再访问对应的属性,用printjson()格式化输出结果:
// 直接查看完整queryPlanner(包含winningPlan和rejectedPlans) printjson(db.collection.find({...}).explain().queryPlanner); // 单独查看winningPlan printjson(db.collection.find({...}).explain().queryPlanner.winningPlan); // 单独查看rejectedPlans printjson(db.collection.find({...}).explain().queryPlanner.rejectedPlans);
方法2:指定explain的详细模式
MongoDB的explain()支持传入模式参数,按需获取不同层级的信息:
// 仅获取查询规划信息(默认模式,包含目标字段) printjson(db.collection.find({...}).explain("queryPlanner")); // 获取规划+执行统计信息 printjson(db.collection.find({...}).explain("executionStats")); // 获取所有候选计划的执行信息 printjson(db.collection.find({...}).explain("allPlansExecution"));
方法3:适配db.collection.explain().find({...})写法
这种写法返回的是游标对象,需要调用.next()获取结果文档:
printjson(db.collection.explain().find({...}).next());
执行后展开结果,就能找到queryPlanner下的winningPlan和rejectedPlans字段。
额外注意
- 确保查询条件
{...}语法正确且有效,空查询或语法错误可能导致结果异常; - 若使用MongoDB Compass等GUI工具,直接执行
db.collection.find({...}).explain(),在结果面板中展开JSON结构即可直观查看目标字段。
内容的提问来源于stack exchange,提问作者Simina97
相关产品推荐
相关产品推荐

