mongodb - Mongodb使用explain查找查询行为理解
问题描述
我在 MongoDB shell 版本:3.0.15
我一直在分析一个查询,但我不明白具体的行为
For:testcollection有两个key,“state”和“all”
db.testcollection.find( {"state" : 1}).explain(true)
keysexamined
和是正确的nreturned
:2568 文档
但对于
db.testcollection.find( {"state" : 1}).limit(1000).explain(true)
nreturned
变成101
和_keysexamined
102
没有索引, acollscan
被命中并101
返回nreturned
. 如果添加了正确的索引,它将命中此查询并且 ixscannreturned
仍然完成101
根据我的理解以及https://docs.mongodb.com/v3.0/core/cursors/index.html的理解,如果它没有限制地返回我的默认文档计数,我不会感到惊讶101
,但是在这里, with limit explain 显示nreturned
101
限制后的文档而不是2568
文档,当没有limit
提供时,解释查询中nreturned
有101
文档。
为什么限制会导致nreturned
在解释查询中显示 101?
解决方案
我相信您所描述的与问题SERVER-24547 一致,其中指出:
如果未指定 batchSize(),Explain("allPlansExecution") 不支持 limit()
此问题影响 MongoDB 版本 3.0.12 及更高版本(在 3.0 系列中),并且根据SERVER-17577已在 MongoDB 的较新版本(即 3.2 和更高版本)中修复。
请注意,在撰写本文时,3.0.15 已经很老了,不再受支持。如果这是一个新部署,最好从 MongoDB 的更新版本(当前为 4.0.3)开始,这样您就不会被更高版本中修复的旧错误所困扰。
推荐阅读
- java - JPA 异常:找到了多行具有给定标识符的行
- types - 有没有办法检测卡的类型,即借记卡或信用卡
- c# - 图表仅在辅助图表中保存 1 行 - Acumatica C#
- c - 尽管 DLGC_WANTTAB 多行 EDIT 对话框控件不使用制表符
- python - Scikit-learn SequentialFeatureSelector 输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值。即使有管道
- tensorflow - 自定义 keras 真正的正数指标是否应该始终返回一个整数?
- python - seaborn 情节不在子情节上绘制
- c# - 如何在不知道 JSON 值的情况下动态解析一些 JSON?
- html - 内置 Bootstrap 'scrollTo' 功能?
- python - 使用 PySpark 数据框中的 2 列作为查找替换所有其他列