Mongodb - $lookup Pipeline Using Collscan Instead Of Index
Solution 1:
The collection scan in your explain output is referring to the map_levels
collection, as noted in the queryPlanner.namespace
value. The $lookup
stage merges data from another collection into the current pipeline. Since you haven't specified any query stages before the $lookup
, the map_levels
collection will be iterated using a collection scan. If an entire collection is being loaded without any filtering or sort criteria, a collection scan has less overhead than iterating an index and fetching the documents.
You can avoid the current collection scan by adding a $match
stage before your $lookup
(assuming you don't want to process the full map_levels
collection).
How can I check the index used by
$lookup
?
Unfortunately query explain output does not (as at MongoDB 4.0) indicate index usage for $lookup
stages. A workaround for this would be running explain using your lookup's pipeline
as a top level aggregation query.
There's a relevant issue to watch/upvote in the MongoDB Issue tracker: SERVER-22622: Improve $lookup explain to indicate query plan on the "from" collection.
Post a Comment for "Mongodb - $lookup Pipeline Using Collscan Instead Of Index"