Samlingsskanningen i din explain-utdata hänvisar till map_levels
samling, som anges i queryPlanner.namespace
värde. $lookup
steg slår samman data från en annan samling till den aktuella pipeline. Eftersom du inte har angett några frågesteg före $lookup
, map_levels
samlingen upprepas med en samlingsskanning. Om en hel samling laddas utan några filtrerings- eller sorteringskriterier, har en samlingsskanning mindre overhead än att iterera ett index och hämta dokumenten.
Du kan undvika den aktuella samlingsskanningen genom att lägga till en $match
steg före din $lookup
(förutsatt att du inte vill bearbeta alla map_levels
samling).
Tyvärr indikerar inte frågeförklaringsutdata (som vid MongoDB 4.0) indexanvändning för $lookup
etapper. En lösning för detta skulle vara att köra förklara med din uppslagnings pipeline
som en aggregeringsfråga på toppnivå.
Det finns ett relevant problem att se/rösta upp i MongoDB Issue Tracker:SERVER-22622:Förbättra $lookup förklara för att ange frågeplan på "från"-samlingen .