gpt4 book ai didi

MongoDB 在仅返回 _id 时使用 COLLSCAN

转载 作者:可可西里 更新时间:2023-11-01 09:12:53 25 4
gpt4 key购买 nike

我想从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com