- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想从 MongoDB 集合中返回所有 ID,我使用了以下代码:
db.coll.find({}, { _id: 1})
但 MongoDB 会扫描整个集合,而不是从默认的 index { _id: 1 }
中读取信息。
来自日志:
{ find: "collection", filter: {}, projection: { _id: 1 } }
planSummary: COLLSCAN cursorid:30463374118 keysExamined:0
docsExamined:544783 numYields:4286 nreturned:544782 reslen:16777238
locks:{ Global: { acquireCount: { r: 8574 } }, Database: {
acquireCount: { r: 4287 } }, Collection: { acquireCount: { r: 4287 } }
} protocol:op_query 7024ms
请问您知道如何解决这个问题吗?
最佳答案
您需要添加一个可以像这样使用此索引的过滤器,以便更改该查询计划 - 并非所有操作都会删除 FETCH 阶段,例如$exists 似乎不起作用:
db.coll.find({ _id: { $ne: 0 }, { _id: 1 }) // works for ObjectIds
对此的部分解释在 documentation 中。 :
A covered query is a query that can be satisfied entirely using an index and does not have to examine any documents. An index covers a query when both of the following apply:
- all the fields in the query are part of an index,
- and all the fields returned in the results are in the same index.
我似乎记得看到一个 JIRA 请求在没有过滤器的情况下支持该请求,但不记得是哪张票...
关于MongoDB 在仅返回 _id 时使用 COLLSCAN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49534020/
我想从 MongoDB 集合中返回所有 ID,我使用了以下代码: db.coll.find({}, { _id: 1}) 但 MongoDB 会扫描整个集合,而不是从默认的 index { _id:
我了解 MongoDB 查询计划中的 COLLSCAN 是什么 - 没有可用的索引,因此 Mongo 必须扫描整个集合。 显然这会导致相关查询的执行时间更长,但我想知道的是它是否会导致任何其他可能影响
我正在尝试在我的 $lookup 管道上使用索引,但它似乎没有按预期工作。 这是我的查询: db.map_levels.explain().aggregate([ { $loo
我是一名优秀的程序员,十分优秀!