Es gibt viele Dinge zu tun, um Ihre Abfrage zu optimieren. Was ich versuchen würde:
-
Wie Anthony Winzlet in den Kommentaren sagte, verwenden Sie möglichst $match Stage als erste Stage. Auf diese Weise können Sie die Anzahl der an die folgenden Stufen übergebenen Dokumente reduzieren und Indizes verwenden.
-
Angenommen, Sie verwenden mindestens die Mongo-Version 3.6, ändern Sie Ihre Lookup-Stufen mit der Syntax „let/pipeline“ (siehe hier ). Auf diese Weise können Sie Ihre 'externen Filter' ( "customer_info.status":{$ne:9}, "model_info.status":{$ne:9} ) in eine $match-Phase in Ihre Suchpipeline integrieren. Mit Indizes auf richtigen Feldern / Sammlungen gewinnen Sie etwas Zeit / Speicher in Ihren $lookup-Phasen.
-
Führen Sie Ihre Abwicklungsphasen so spät wie möglich durch, um die Anzahl der an die folgenden Phasen übergebenen Dokumente zu begrenzen.
Es ist wichtig zu verstehen, wie die Aggregationspipeline funktioniert:Jede Phase empfängt Daten, erledigt ihre Aufgaben und leitet Daten an die nächste Phase weiter. Je weniger Daten also an die Pipeline übergeben werden, desto schneller ist Ihre Abfrage.