2014-09-03 65 views
1

我刚才看了这个链接Mongodb Explain for Aggregation framework但不能说明我的问题解释总框架

我想检索聚合信息,如db.coll.find({bla:foo}).explain()

我试图

db.coll.aggregate([ 
     my-op 
], 
{ 
explain: true 
}) 

结果无法解释,但查询数据库。

我已经试过也

db.runCommand({ 
     aggregate: "mycoll", 
     pipeline: [ 
     my- op 
     ], 
     explain: true 
    }) 

我检索到的信息与此命令,但我没有米利斯,nscannedObjects等等

我使用MongoDB的2.6.2

回答

3

聚合唐不像传统的查询运行,你不能运行他们的解释。它们实际上被分类为命令,尽管它们使用索引,但您不能随时了解它们是如何实时执行的。

最好的办法是获取聚合的$匹配部分,并将其作为查询运行,并解释以找出索引如何执行并获得有关nscanned的想法。

+0

非常感谢! – Twinsen 2014-09-03 15:33:36

+0

这是不适用于MongoDB 2.6+ - 检查[docs](http://docs.mongodb.org/master/reference/method/db.collection.aggregate/#db.collection.aggregate) – wdberkeley 2014-09-03 21:35:04

+0

这是一个很好的除了2.6 – Ben 2014-09-04 15:58:55

1

我不确定你如何设法失败获取解释信息。在2.6.x的这些信息可用,您you can explain聚集结果:

db.orders.aggregate([ 
    # put your whole aggregation query 
], { 
    explain: true 
}) 

,给了我这样的:

{ 
    "stages" : [ 
     { 
      "$cursor" : { 
       "query" : { 
        "a" : 1 
       }, 
       "queryPlanner" : { 
        "plannerVersion" : 1, 
        "namespace" : "test.a", 
        "indexFilterSet" : false, 
        "parsedQuery" : { 
         "a" : { 
          "$eq" : 1 
         } 
        }, 
        "winningPlan" : { 
         "stage" : "COLLSCAN", 
         "filter" : { 
          "a" : { 
           "$eq" : 1 
          } 
         }, 
         "direction" : "forward" 
        }, 
        "rejectedPlans" : [ ] 
       } 
      } 
     } 
    ], 
    "ok" : 1 
} 
+2

MongoDB 2.6的聚合'explain:true'选项描述了如何处理管道,但不包含与find()查询中的'explain()'相同的执行统计信息(例如,'nScanned'和'nScannedObjects'值)。似乎这是原始问题试图描述的内容 - 他们能够检索信息,但不能获得预期的细节。 – Stennie 2015-04-20 01:48:37