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