使用$ facet查询时,MongoDB索引不起作用

问题描述

我在 example 集合中的 status 键上有索引。 这是我进行的汇总查询:

db.getCollection('example').aggregate([
    {
        $facet: {
            Active: [
                {
                    $match: {
    
                            status: "OK"
                    }
                }
            ]
       }
   }
])

此查询需要10秒钟以上才能返回。 如果我使用find而不是聚合进行相同的查询,则查询将在0.003毫秒内返回。 正如我提到的,状态键上有索引。

我在这里想念什么?

解决方法

MongoDB聚合充当管道,在管道开始时从命名集合中读取文档,并按每个阶段进行匹配和/或变异,然后传递到下一个阶段。

一个$facet阶段,传递到该阶段的每个文档都转发到每个方面。

对于您的管道,聚合将从集合中读取所有文档,并将它们全部传递到Active面,其中$match阶段将尽职调查每个人。

当聚合管道以$match$geoNear之类的过滤阶段开始时,它将使用索引从集合中选择匹配的文档,从而大大减少了进入管道的文档数量

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...