Pro optimalizaci dotazu je třeba udělat mnoho věcí. Co bych zkusil :
-
Jak řekl Anthony Winzlet v komentářích, použijte jako první fázi $match stage. Tímto způsobem můžete snížit počet dokumentů předávaných do následujících fází a používat indexy.
-
Za předpokladu, že používáte verzi mongo alespoň 3.6, změňte fáze vyhledávání pomocí syntaxe 'let/pipeline' (viz zde ). Tímto způsobem můžete integrovat své 'externí filtry' ( "customer_info.status":{$ne:9}, "model_info.status":{$ne:9} ) ve fázi $match ve vašem vyhledávacím kanálu. S indexy na správných polích / kolekcích získáte určitý čas / paměť ve fázích vyhledávání $.
-
Udělejte si fáze uvolnění co nejpozději, abyste omezili počet dokumentů předávaných do následujících fází.
Je důležité pochopit, jak funguje agregační kanál:každá fáze přijímá data, dělá své věci a přenáší data do další fáze. Čím méně dat je tedy předáno do kanálu, tím rychlejší bude váš dotaz.