Ci sono molte cose da fare per ottimizzare la tua query. Cosa proverei :
-
Come ha detto Anthony Winzlet nei commenti, usa il più possibile $match stage come primo stadio. In questo modo puoi ridurre il numero di documenti passati alle fasi successive e utilizzare gli indici.
-
Supponendo che utilizzi almeno la versione 3.6 mongo, modifica le fasi di ricerca utilizzando la sintassi 'let/pipeline' (vedi qui ). In questo modo, puoi integrare i tuoi "filtri esterni" ("customer_info.status":{$ne:9}, "model_info.status":{$ne:9} ) in una fase $match nella pipeline di ricerca. Con gli indici sui campi/raccolte a destra, guadagnerai un po' di tempo/memoria nelle tue fasi di $lookup.
-
Svolgi le tue fasi di rilassamento il più tardi possibile, per limitare il numero di documenti passati alle fasi successive.
È importante capire come funziona la pipeline di aggregazione:ogni fase riceve dati, fa le sue cose e passa i dati alla fase successiva. Quindi meno dati vengono passati alla pipeline, più veloce sarà la tua query.