MongoDB 3.0 explain()结果未记录的过滤字段

时间:2016-01-18 11:42:48

标签: mongodb wiredtiger

我在以下查询上运行解释:

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在扫描索引并将文档提取到内存后过滤掉东西,是不是?

感谢,

2 个答案:

答案 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/