有没有办法explain
运行runCommand
?我有以下查询:
db.runCommand({geoNear:"Locations", near:[50,50], spherical:true})
我怎样才能运行explain
它?我想获得执行时间。
有没有办法explain
运行runCommand
?我有以下查询:
db.runCommand({geoNear:"Locations", near:[50,50], spherical:true})
我怎样才能运行explain
它?我想获得执行时间。
据我所知,explain
是一种关于游标的方法。但是,您可以启用集成的 mongodb 分析器:
db.setProfilingLevel(2); // log all operations
db.setProfilingLevel(1, 50); // log all operations longer than 50msecs
这会将诸如nscanned
,之类的详细信息记录nreturned
到名为 的封顶集合system.profile
中,但不会像explain()
调用那样提供详细信息。
但是,在这种情况下,我认为可以将其更改runCommand
为$near
-query 吗?这将使您可以完全访问explain
.
我想我们不能为 runCommand 做解释。一些 runCommand 会自动为您提供统计信息(例如 distinct command : db.runCommand({distinct : 'test', key : 'a'}) )
但是,您可以借助查询分析器。
db.setProfilingLevel(2)
运行该查询后,关闭分析器,并检查该查询的 system.profile 集合。
根据解释文档,您可以简单地:
db.runCommand({
explain: {geoNear:"Locations", near:[50,50], spherical:true}
})
两个答案(来自mnemosyn
和Abhishek Kumar
)都是正确的。
但是,如果您只想查看执行时间(像我一样),结果中会提供这些信息以及一些额外的统计信息:
...
"stats" : {
"time" : 2689,
"btreelocs" : 0,
"nscanned" : 1855690,
"objectsLoaded" : 979,
"avgDistance" : 0.006218027001875209,
"maxDistance" : 0.006218342348749806
},
"ok" : 1
好吧,在发布问题之前我应该仔细看看:)。
也许不是,runCommand
但我使用这样的东西:
expStats = function() {
var exp = db.collection.find({"stats.0.age" : 10},{"stats.age" : 1}).explain("allPlansExecution");
print ("totalDocsExamined = "+exp.executionStats.totalDocsExamined);
print ("nReturned = "+exp.executionStats.nReturned);
return print ("execTime = "+exp.executionStats.executionTimeMillis);
}