MongoDb 中的投影

Projection in MongoDb

我正在学习MongoDb,我想到了一个关于投影的问题。

当我们对一些字段进行投影时,MongoDB是做什么的? 它会读取整个文档然后删除一些字段和 return 结果,还是不会读取排除的字段和 return 查询中提到的字段。

例如如果我有一个包含 4 个字段和 3 个数组(每个大小约为 10)的文档,我只想要 4 个字段而不是数组。 MongoDB 会读取整个文档并删除数组还是只读取 4 个字段?

如果是第一种情况,如果文档中的数组变大,执行时间或延迟会有何不同?

文档在存储上是压缩的,因此mongo需要先读取文档,解压缩并只获取过滤器中指定的字段。 这里的技巧是,当您按某些字段进行搜索时,您需要为它们建立索引,以便搜索在内存中更快地进行,并避免 mongo 逐一读取所有文档并检查搜索的字段。 而且,如果您只需要更快地访问那些字段,最好将所有这些字段都放在复合索引中,然后通过所谓的“覆盖查询”搜索它们,那么您将仅在内存中搜索并仅从内存中获取而无需访问存储快得多。 此外,在许多情况下,同一文档会被多次搜索,因此 mongoDB 预测算法会将这些文档缓存在内存中以便更快地访问。