MongoDB aggregation explain仅提供关于第一阶段的数据

MongoDB aggregation explain仅提供关于第一阶段的数据,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我正在一个服务器上运行以下聚合查询 根据MongoDB文档,它应该返回游标,我可以迭代并查看所有管道阶段的数据: 该操作返回一个游标,其中包含有关聚合管道处理的详细信息 但是,聚合命令仅返回有关前两个匹配阶段的解释信息: { "stages" : [ { "$cursor" : { "query" : { "$and" : [

我正在一个服务器上运行以下聚合查询

根据MongoDB文档,它应该返回游标,我可以迭代并查看所有管道阶段的数据:

该操作返回一个游标,其中包含有关聚合管道处理的详细信息

但是,聚合命令仅返回有关前两个匹配阶段的解释信息:

{
    "stages" : [ 
        {
            "$cursor" : {
                "query" : {
                    "$and" : [ 
                        {
                            "address.zipcode" : {
                                "$in" : [ 
                                    "10314", 
                                    "11208", 
                                    "11219"
                                ]
                            }
                        }, 
                        {
                            "grades" : {
                                "$elemMatch" : {
                                    "score" : {
                                        "$gte" : 1.0
                                    }
                                }
                            }
                        }
                    ]
                },
                "fields" : {
                    "borough" : 1,
                    "_id" : 0
                },
                "queryPlanner" : {
                    "plannerVersion" : 1,
                    "namespace" : "test.restaurants",
                    "indexFilterSet" : false,
                    "parsedQuery" : {
                        "$and" : [ 
                            {
                                "grades" : {
                                    "$elemMatch" : {
                                        "score" : {
                                            "$gte" : 1.0
                                        }
                                    }
                                }
                            }, 
                            {
                                "address.zipcode" : {
                                    "$in" : [ 
                                        "10314", 
                                        "11208", 
                                        "11219"
                                    ]
                                }
                            }
                        ]
                    },
                    "winningPlan" : {
                        "stage" : "COLLSCAN",
                        "filter" : {
                            "$and" : [ 
                                {
                                    "grades" : {
                                        "$elemMatch" : {
                                            "score" : {
                                                "$gte" : 1.0
                                            }
                                        }
                                    }
                                }, 
                                {
                                    "address.zipcode" : {
                                        "$in" : [ 
                                            "10314", 
                                            "11208", 
                                            "11219"
                                        ]
                                    }
                                }
                            ]
                        },
                        "direction" : "forward"
                    },
                    "rejectedPlans" : []
                }
            }
        }, 
        {
            "$group" : {
                "_id" : "$borough",
                "count" : {
                    "$sum" : {
                        "$const" : 1.0
                    }
                }
            }
        }, 
        {
            "$sort" : {
                "sortKey" : {
                    "count" : -1
                }
            }
        }
    ],
    "ok" : 1.0
}
并且返回的对象看起来根本不像游标。
如果我将聚合结果保存到一个变量,然后尝试使用游标方法(
hasNext(),next()
,等等)对其进行迭代,我会得到以下结果:

TypeError: result.next is not a function : @(shell):1:1
如何查看所有管道步骤的信息?

谢谢你。解释信息

Explain()返回查询的成功计划,即数据库如何在管道中处理文档之前获取文档

这里,因为
地址.zipcode
等级
没有索引,数据库执行
COLLSCAN
,即迭代数据库中的所有文档,查看它们是否匹配

然后,对文档进行分组并对结果进行排序。这些操作是在“内存”中对以前获取的文档执行的。这些字段没有索引,因此这里不能使用特殊计划

更多信息请点击此处:

2。聚合查询上的Explain()不返回游标

出于某种原因,聚合查询上的
explain()
不返回游标,而是直接返回BSON对象(与
find()
query上的
explain()
不同)

这可能是一个bug,但文档中没有这方面的内容

无论如何,您可以:

var explain =  db.restaurants.explain().aggregate([
  {$match: {"address.zipcode": {$in: ["10314", "11208", "11219"]}}},
  {$match: {"grades": {$elemMatch: {score: {$gte: 1}}}}},
  {$group: {_id: "$borough", count: {$sum: 1} }}, 
  {$sort: {count: -1} }
]);
printjson(explain)

1。解释信息

Explain()返回查询的成功计划,即数据库如何在管道中处理文档之前获取文档

这里,因为
地址.zipcode
等级
没有索引,数据库执行
COLLSCAN
,即迭代数据库中的所有文档,查看它们是否匹配

然后,对文档进行分组并对结果进行排序。这些操作是在“内存”中对以前获取的文档执行的。这些字段没有索引,因此这里不能使用特殊计划

更多信息请点击此处:

2。聚合查询上的Explain()不返回游标

出于某种原因,聚合查询上的
explain()
不返回游标,而是直接返回BSON对象(与
find()
query上的
explain()
不同)

这可能是一个bug,但文档中没有这方面的内容

无论如何,您可以:

var explain =  db.restaurants.explain().aggregate([
  {$match: {"address.zipcode": {$in: ["10314", "11208", "11219"]}}},
  {$match: {"grades": {$elemMatch: {score: {$gte: 1}}}}},
  {$group: {_id: "$borough", count: {$sum: 1} }}, 
  {$sort: {count: -1} }
]);
printjson(explain)