Mongodb使用explain

时间:2018-11-04 08:37:57

标签: mongodb

我使用的是MongoDB Shell版本:3.0.15

我一直在分析查询,但不了解具体行为

对于:testcollection有两个键,“状态”和“全部”

db.testcollection.find( {"state" : 1}).explain(true) 

keysexaminednreturned是正确的:2568个文档

db.testcollection.find( {"state" : 1}).limit(1000).explain(true)

nreturned变成101keysexamined 102

没有索引,将命中collscan并返回101中的nreturned个文档。如果添加了正确的索引,它将对该查询命中,并且ixscan仍以nreturned 101

完成

从我的理解以及https://docs.mongodb.com/v3.0/core/cursors/index.html的角度出发,如果无限制地返回默认的文档数101,我也不会感到惊讶,但是在这里,限制说明显示了{{1} } nreturned个文档(而不是101个文档)被限制后,并且没有提供2568时,limit的解释查询中有nreturned个文档。

为什么限制铅在解释查询中显示101 101?

1 个答案:

答案 0 :(得分:1)

我相信您的描述与问题SERVER-24547相符,其中指出:

  

如果未指定batchSize(),则Explain(“ allPlansExecution”)不接受limit()

此问题影响MongoDB 3.0.12版和更高版本(在3.0系列中),并且在SERVER-17577中已在更高版本的MongoDB(即3.2版和更高版本)中修复。

请注意,在撰写本文时,3.0.15版本已经很旧,不再受支持。如果这是新部署,则最好从更新版本的MongoDB(当前为4.0.3)开始,这样您就不会被在更高版本中修复的旧错误所困扰。