前$比赛有一个MongoDB的周围数据的100GB和每个在$匹配表达式场,我有一个指数(单场指数)。
现在我试图汇总(),并在这背后的管道,$匹配写道$项目的第一部分。
聚合运行并返回正确的结果,但需要数小时!这是真的只处理过滤后的($匹配)数据,还是mongo会聚合全部数据并过滤?
在我的测试情况下,150MB左右比赛$过滤器(而非100GB的全数据的大小)。
无意间,我改变了顺序,并在管道定义$项目之前写的$匹配。这样,它在几秒钟内完成。
什么时候MongoDB中通常会降低输入的数据,但它也应对在$匹配字段中的指数?
我在找到令人震惊的聚合框架。能够以任何你喜欢的方式订购操作员真的打开了世界的可能性。这个答案帮助我意识到'$ project'后可以'$ match',这样我就可以过滤'$ project'后的字段。 – Rohmer 2016-10-16 21:34:20