Има много неща, които трябва да направите, за да оптимизирате вашата заявка. Какво бих опитал:
-
Както Антъни Уинзлет каза в коментарите, използвайте колкото е възможно $match етап като първи етап. По този начин можете да намалите броя на документите, предавани на следващите етапи, и да използвате индекси.
-
Ако приемем, че използвате поне 3.6 mongo версия, променете етапите на търсене, като използвате синтаксиса „let/pipeline“ (вижте тук ). По този начин можете да интегрирате вашите „външни филтри“ („customer_info.status“:{$ne:9}, „model_info.status“:{$ne:9}) в етап $match във вашия конвейер за справки. С индекси в десните полета/колекции ще спечелите малко време/памет в етапите на $lookup.
-
Направете етапите си на отпускане възможно най-късно, за да ограничите броя на документите, предавани на следващите етапи.
Важно е да разберете как работи тръбопроводът за агрегиране:всеки етап получава данни, прави своите неща и предава данни на следващия етап. Така че колкото по-малко данни се подават към тръбопровода, толкова по-бърза ще бъде вашата заявка.