前$比賽有一個MongoDB的周圍數據的100GB和每個在$匹配表達式場,我有一個指數(單場指數)。
現在我試圖彙總(),並在這背後的管道,$匹配寫道$項目的第一部分。
聚合運行並返回正確的結果,但需要數小時!這是真的只處理過濾後的($匹配)數據,還是mongo會聚合全部數據並過濾?
在我的測試情況下,150MB左右比賽$過濾器(而非100GB的全數據的大小)。
無意間,我改變了順序,並在管道定義$項目之前寫的$匹配。這樣,它在幾秒鐘內完成。
什麼時候MongoDB中通常會降低輸入的數據,但它也應對在$匹配字段中的指數?
我在找到令人震驚的聚合框架。能夠以任何你喜歡的方式訂購操作員真的打開了世界的可能性。這個答案幫助我意識到'$ project'後可以'$ match',這樣我就可以過濾'$ project'後的字段。 – Rohmer 2016-10-16 21:34:20