De collectiescan in je explain-output verwijst naar de map_levels
collectie, zoals vermeld in de queryPlanner.namespace
waarde. De $lookup
stage voegt gegevens uit een andere verzameling samen in de huidige pijplijn. Aangezien u geen zoekfasen heeft opgegeven vóór de $lookup
, de map_levels
collectie wordt herhaald met behulp van een collectiescan. Als een hele collectie wordt geladen zonder filter- of sorteercriteria, heeft een collectiescan minder overhead dan het herhalen van een index en het ophalen van de documenten.
U kunt de huidige collectiescan vermijden door een $match
. toe te voegen fase vóór uw $lookup
(ervan uitgaande dat u niet de volledige map_levels
wilt verwerken collectie).
Helaas geeft de uitvoer van query-uitleg niet (zoals bij MongoDB 4.0) indexgebruik aan voor $lookup
stadia. Een tijdelijke oplossing hiervoor zou zijn om uit te leggen met behulp van de pipeline
van uw zoekopdracht als een aggregatiequery op het hoogste niveau.
Er is een relevant probleem om naar te kijken/op te stemmen in de MongoDB Issue-tracker:SERVER-22622:$lookup verbeteren uitleggen om het zoekplan op de "van"-verzameling aan te geven .