Сканирането на колекцията във вашия резултат за обяснение се отнася до map_levels
колекция, както е отбелязано в queryPlanner.namespace
стойност. $lookup
етап обединява данни от друга колекция в текущия конвейер. Тъй като не сте посочили никакви етапи на заявка преди $lookup
, map_levels
колекцията ще бъде повторена с помощта на сканиране на колекция. Ако се зарежда цяла колекция без каквито и да било критерии за филтриране или сортиране, сканирането на колекцията има по-малко разходи от итерирането на индекс и извличането на документите.
Можете да избегнете сканирането на текущата колекция, като добавите $match
етап преди вашия $lookup
(ако приемем, че не искате да обработвате пълните map_levels
колекция).
За съжаление резултатът от обяснението на заявката не показва (както при MongoDB 4.0) използването на индекс за $lookup
етапи. Заобиколно решение за това би било стартирането на обяснение с помощта на pipeline
на вашето търсене като заявка за агрегиране от най-високо ниво.
Има подходящ проблем за гледане/гласуване в полза на MongoDB инструмента за проследяване на проблеми:SERVER-22622:Подобрете $lookup обясни, за да посочи план на заявката в колекцията "от" .