我在以下查询上运行解释:
db.explain().find({ site_id:1, dimensions:[], create_date: { $gte: new Date(1452603948196) } )
结果包含“过滤器”对象,这是什么意思?
{ "winningPlan" : {
"stage" : "FETCH",
"filter" : {
"dimensions" : {
"$eq" : [ ]
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"site_id" : 1,
"dimensions" : 1,
"create_date" : 1
}, }
据我所知,这意味着mongo在扫描索引并将文档提取到内存后过滤掉东西,是不是?
感谢,
答案 0 :(得分:1)
您的结果将根据维度等于数组中给出的值的条件进行过滤。
答案 1 :(得分:1)
是的,你是对的。来自 explain
的文档解释结果将查询计划呈现为阶段树。每个阶段将其结果(即文档或索引键)传递给父节点。叶节点访问集合或索引。内部节点操纵由子节点产生的文档或索引键。根节点是MongoDB从中派生结果集的最后阶段。
还
explain.queryPlanner.winningPlan.stage 一个字符串,表示舞台的名称。
每个阶段都包含特定于舞台的信息。例如,IXSCAN阶段将包括索引边界以及特定于索引扫描的其他数据。如果舞台具有子舞台或多个子舞台,则舞台将具有inputStage或inputStages。
explain.queryPlanner.winningPlan.inputStage 描述子阶段的文档,它为其父级提供文档或索引键。如果父级只有一个孩子,则该字段存在。
换句话说,IXSCAN是FETCH的子级(因为它是一个输入级),IXSCAN的结果被发送到FETCH。
来源:https://docs.mongodb.com/manual/reference/explain-results/