Mongodb 解释聚合框架

Mongodb 解释聚合框架,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我只是读了这个链接,但没有解释我的问题 我想要检索有关聚合的信息,比如db.coll.find{bla:foo}.explain 我试过了 db.coll.aggregate([ my-op ], { explain: true }) 结果不是解释,而是对数据库的查询 我也试过了 db.runCommand({ aggregate: "mycoll", pipeline: [ my- op ],

我只是读了这个链接,但没有解释我的问题

我想要检索有关聚合的信息,比如db.coll.find{bla:foo}.explain

我试过了

db.coll.aggregate([
        my-op
],
{
explain: true
}) 
结果不是解释,而是对数据库的查询

我也试过了

db.runCommand({
        aggregate: "mycoll",
        pipeline: [
        my- op
        ],
        explain: true
    })
我用这个命令检索了信息,但我没有millis、nscannedObjects等


我使用mongoDb 2.6.2

聚合不像传统的查询那样运行,您不能对它们运行解释。它们实际上被归类为命令,尽管它们使用索引,但您无法立即了解它们是如何实时执行的


您最好的选择是将聚合的$match部分作为查询运行,并使用explain了解索引的执行情况,了解nscanned。聚合的运行方式与传统查询不同,您无法对其运行explain。它们实际上被归类为命令,尽管它们使用索引,但您无法立即了解它们是如何实时执行的


最好的办法是使用聚合中的$match部分,并将其作为带有explain的查询运行,以了解索引的执行情况,并了解nscaned的情况。

我不确定您是如何无法获取explain信息的。在2.6.x中,此信息可用,并且您的聚合结果:

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.6.x中,此信息可用,并且您的聚合结果:

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
}

对于MongoDB 2.6+,这是不正确的-检查这是对2.6的一个很好的补充这对于MongoDB 2.6+来说不是正确的-检查这是对2.6 MongoDB 2.6的聚合解释的一个很好的补充说明:true选项描述了管道将如何处理,但不包括与查找查询上的解释相同的执行统计信息,例如,nScanned和nScannedObjects值。似乎这就是原始问题试图描述的——他们能够检索到信息,但无法检索到预期的细节。MongoDB 2.6的聚合解释:true选项描述了管道将如何处理,但不包括与查找查询解释相同的执行统计信息,nScanned和nScannedObjects值。似乎这就是最初的问题试图描述的——他们能够检索到信息,但不能检索到预期的细节。