Der er mange ting at gøre for at optimere din forespørgsel. Hvad jeg ville prøve :
-
Som Anthony Winzlet sagde i kommentarerne, så brug som muligt $match stage som første fase. På denne måde kan du reducere antallet af dokumenter, der sendes til de følgende stadier, og bruge indekser.
-
Forudsat at du bruger mindst 3.6 mongo-versionen, skal du ændre dine opslagstrin ved hjælp af 'let/pipeline'-syntaksen (se her ). På denne måde kan du integrere dine 'eksterne filtre' ( "customer_info.status":{$ne:9}, "model_info.status":{$ne:9} ) i en $match-fase i din opslagspipeline. Med indekser på højre felter/samlinger vil du få lidt tid/hukommelse i dine $opslagsfaser.
-
Lav dine afslapningsfaser så sent som muligt for at begrænse antallet af dokumenter, der sendes til de følgende stadier.
Det er vigtigt at forstå, hvordan aggregeringspipeline fungerer:hver fase modtager data, gør sine ting og sender data til næste fase. Så jo færre data der sendes til pipelinen, jo hurtigere vil din forespørgsel være.