微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用$ facet查询时,MongoDB索引不起作用

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

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

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

在这里想念什么?

解决方法

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。