Det finns många saker att göra för att optimera din fråga. Vad jag skulle prova :
-
Som Anthony Winzlet sa i kommentarerna, använd som möjligt $match-scen som första etapp. På så sätt kan du minska antalet dokument som skickas till följande stadier och använda index.
-
Förutsatt att du använder minst 3.6 mongo-versionen, ändra dina uppslagssteg med hjälp av 'let/pipeline'-syntaxen (se här ). På så sätt kan du integrera dina "externa filter" ( "customer_info.status":{$ne:9}, "model_info.status":{$ne:9} ) i ett $match-steg i din uppslagningspipeline. Med index på högra fält / samlingar kommer du att få lite tid / minne i dina $lookup-stadier.
-
Gör dina avkopplingssteg så sent som möjligt för att begränsa antalet dokument som skickas till följande steg.
Det är viktigt att förstå hur aggregeringspipeline fungerar:varje steg tar emot data, gör sina grejer och skickar data till nästa steg. Så ju mindre data som skickas till pipelinen, desto snabbare blir din fråga.