MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Schrecklich verschlechterte Leistung mit anderen Join-Bedingungen in $lookup (mit Pipeline)

Die zweite Version fügt eine Aggregations-Pipeline-Ausführung für jedes Dokument in der verbundenen Sammlung hinzu .

Die Dokumentation sagt:

Die Pipeline wird für jedes Dokument in der Sammlung ausgeführt, nicht für jedes übereinstimmende Dokument.

Je nachdem, wie groß die Sammlung ist (sowohl Anzahl der Dokumente als auch Dokumentengröße), kann dies eine anständige Zeitspanne ausmachen.

Sinnvoll – für alle zusätzlichen Dokumente aufgrund der Aufhebung des Limits muss auch die Aggregationspipeline ausgeführt werden.

Es ist möglich, dass die Ausführung der Aggregationspipeline pro Dokument nicht so optimiert ist, wie sie sein könnte. Wenn zum Beispiel die Pipeline für jedes Dokument auf- und abgebaut wird, könnte das leicht mehr Aufwand verursachen als in den $match-Bedingungen.

Das Ausführen einer Aggregationspipeline pro verbundenem Dokument bietet zusätzliche Flexibilität. Wenn Sie diese Flexibilität benötigen, kann es sinnvoll sein, die Pipeline auszuführen, obwohl die Leistung unabhängig davon berücksichtigt werden muss. Wenn Sie dies nicht tun, ist es sinnvoll, einen performanteren Ansatz zu verwenden.