Der Sammlungsscan in Ihrer EXPLAIN-Ausgabe bezieht sich auf die map_levels
Sammlung, wie im queryPlanner.namespace
angegeben Wert. Die $lookup
stage führt Daten aus einer anderen Sammlung mit der aktuellen Pipeline zusammen. Da Sie vor dem $lookup
keine Abfragephasen angegeben haben , die map_levels
Die Sammlung wird mit einem Sammlungsscan wiederholt. Wenn eine ganze Sammlung ohne Filter- oder Sortierkriterien geladen wird, hat ein Sammlungs-Scan weniger Overhead als das Iterieren eines Indexes und das Abrufen der Dokumente.
Sie können den aktuellen Sammlungsscan vermeiden, indem Sie ein $match
hinzufügen Stufe vor Ihrem $lookup
(vorausgesetzt, Sie möchten nicht die vollständigen map_levels
verarbeiten Sammlung).
Unglücklicherweise gibt die Abfrage-Explain-Ausgabe nicht (wie bei MongoDB 4.0) die Indexnutzung für $lookup
an Stufen. Eine Problemumgehung hierfür wäre das Ausführen von EXPLAIN mithilfe der pipeline
Ihrer Suche als Aggregationsabfrage der obersten Ebene.
Im MongoDB Issue Tracker gibt es ein relevantes Problem, das Sie beobachten/upvoten sollten:SERVER-22622:Improve $lookup Erklären Sie, wie Sie den Abfrageplan für die "From"-Sammlung angeben .