3

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

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

我怎样才能运行explain它?我想获得执行时间。

4

5 回答 5

1

据我所知,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.

于 2013-06-27T10:25:35.173 回答
1

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

但是,您可以借助查询分析器。

db.setProfilingLevel(2)

运行该查询后,关闭分析器,并检查该查询的 system.profile 集合。

于 2013-06-27T10:28:48.447 回答
1

根据解释文档,您可以简单地:

db.runCommand({
    explain: {geoNear:"Locations", near:[50,50], spherical:true}
})
于 2020-04-30T13:48:31.870 回答
0

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

但是,如果您只想查看执行时间(像我一样),结果中会提供这些信息以及一些额外的统计信息:

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

好吧,在发布问题之前我应该​​仔细看看:)。

于 2013-06-27T12:04:20.323 回答
-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);
}
于 2016-05-23T16:07:29.983 回答