如何“解释”runCommand?

时间:2013-06-27 09:59:33

标签: mongodb

有没有办法与explain一起运行runCommand?我有以下查询:

db.runCommand({geoNear:"Locations", near:[50,50], spherical:true})

如何在其上运行explain?我想获得执行时间。

5 个答案:

答案 0 :(得分:1)

据我所知,explain是一种游标方法。但是,您可以启用integrated mongodb profiler

db.setProfilingLevel(2); // log all operations
db.setProfilingLevel(1, 50); // log all operations longer than 50msecs

这会将nscannednreturned等详细信息记录到名为system.profile的上限集合中,但不会提供与explain()调用相同的详细信息。

在这种情况下,我认为有可能将runCommand更改为$near - 查询吗?这样您就可以完全访问explain

答案 1 :(得分:1)

我想我们无法解释runCommand。一些runCommand会自动为您提供统计信息(例如,不同的命令:db.runCommand({distinct:'test',key:'a'}))

但是,您可以获取查询分析器的帮助。

db.setProfilingLevel(2)

运行该查询后,请关闭探查器,并检查system.profile集合以查询此查询。

答案 2 :(得分:1)

根据explain docs,您可以简单地:

db.runCommand({
    explain: {geoNear:"Locations", near:[50,50], spherical:true}
})

答案 3 :(得分:0)

这两个答案(来自mnemosynAbhishek Kumar)都是正确的。

但是,如果你只是想看看执行时间(就像我一样),结果中会提供一些额外的统计数据:

...
"stats" : {
        "time" : 2689,
        "btreelocs" : 0,
        "nscanned" : 1855690,
        "objectsLoaded" : 979,
        "avgDistance" : 0.006218027001875209,
        "maxDistance" : 0.006218342348749806
},
"ok" : 1

嗯,我应该在发布问题之前仔细观察:)。

答案 4 :(得分:-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);
}