Skip to content Skip to sidebar Skip to footer

Mongodb - $lookup Pipeline Using Collscan Instead Of Index

I'm trying to use indexing on my $lookup pipeline but it doesn't seem to be working as intended. Here's my query: db.map_levels.explain().aggregate([ { $lookup:

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"