我使用的是MongoDB Shell版本:3.0.15
我一直在分析查询,但不了解具体行为
对于:testcollection有两个键,“状态”和“全部”
db.testcollection.find( {"state" : 1}).explain(true)
keysexamined
和nreturned
是正确的:2568个文档
但
db.testcollection.find( {"state" : 1}).limit(1000).explain(true)
nreturned
变成101
和keysexamined
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?
答案 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)开始,这样您就不会被在更高版本中修复的旧错误所困扰。