- 
    Type:Improvement 
- 
    Resolution: Unresolved
- 
    Priority:Major - P3 
- 
    None
- 
    Affects Version/s: None
- 
    Component/s: None
- 
        Query Optimization
- 
        None
- 
        None
- 
        None
- 
        None
- 
        None
- 
        None
- 
        None
This would work similarly to distinct('x'), but for each distinct x value discovered, it should then seek to the first entry with that x and a y that would match the query. If you land in a matching x and y, then record the value and jump. Either way, after that jump to the next possible x and repeat. This should do roughly 2x(number of distinct x values) seeks into the index, and no record fetches.
Right now it just does a table scan which is likely to be much more expensive:
> db.foo.createIndex({x:1, y:1})
{
	"numIndexesBefore" : 2,
	"numIndexesAfter" : 3,
	"createdCollectionAutomatically" : false,
	"ok" : 1
}
> db.foo.explain().distinct('x', {y:1})
{
	"explainVersion" : "1",
	"queryPlanner" : {
		"namespace" : "test.foo",
		"parsedQuery" : {
			"y" : {
				"$eq" : 1
			}
		},
		"indexFilterSet" : false,
		"queryHash" : "3F4E3077",
		"planCacheKey" : "75804815",
		"optimizationTimeMillis" : 0,
		"maxIndexedOrSolutionsReached" : false,
		"maxIndexedAndSolutionsReached" : false,
		"maxScansToExplodeReached" : false,
		"prunedSimilarIndexes" : false,
		"winningPlan" : {
			"isCached" : false,
			"stage" : "COLLSCAN",
			"filter" : {
				"y" : {
					"$eq" : 1
				}
			},
			"direction" : "forward"
		},
		"rejectedPlans" : [ ]
	},
	"command" : {
		"distinct" : "foo",
		"key" : "x",
		"query" : {
			"y" : 1
		},
		"$db" : "test"
	},
	"serverInfo" : {
		"host" : "ws",
		"port" : 27017,
		"version" : "8.1.0-alpha-1988-gb141e74",
		"gitVersion" : "b141e743215ced3bfea98f2353355b9f3a982369"
	},
	"serverParameters" : {
		"internalQueryFacetBufferSizeBytes" : 104857600,
		"internalQueryFacetMaxOutputDocSizeBytes" : 104857600,
		"internalLookupStageIntermediateDocumentMaxSizeBytes" : 104857600,
		"internalDocumentSourceGroupMaxMemoryBytes" : 104857600,
		"internalQueryMaxBlockingSortMemoryUsageBytes" : 104857600,
		"internalQueryProhibitBlockingMergeOnMongoS" : 0,
		"internalQueryMaxAddToSetBytes" : 104857600,
		"internalDocumentSourceSetWindowFieldsMaxMemoryBytes" : 104857600,
		"internalQueryFrameworkControl" : "trySbeRestricted",
		"internalQueryPlannerIgnoreIndexWithCollationForRegex" : 1
	},
	"ok" : 1
}
- related to
- 
                    SERVER-113145 Use distinct scan for $group+$top/$bottom and $sort when sort orders are compatible -         
- Needs Scheduling
 
-