在 $match 表达式中有一个包含大约 100GB 数据和每个字段的 mongodb,我有一个索引(单字段索引)。
现在我尝试了 aggregate() 并将 $project 写为管道的第一部分, $match 后面。
聚合运行并返回正确的结果,但需要几个小时!这真的只处理过滤后的 ($match) 数据,还是 mongo 聚合所有数据并在之后过滤?
在我的测试用例中,$match 过滤了大约 150MB(而不是 100GB 的完整数据大小)。
意外地,我更改了顺序,并在管道定义中的 $project 之前写了 $match。这样,几秒钟内就完成了。
mongodb通常什么时候减少输入数据,是否也处理$match中字段的索引?