-
Type:
Bug
-
Resolution: Won't Fix
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
None
-
Query Optimization
-
ALL
-
None
-
None
-
None
-
None
-
None
-
None
-
None
Steps to reproduce:
> db.c.insert({_id: 1, a: "foo"})
> db.c.createIndex({a: 1})
> db.c.find({a: "foo"}, {key: {$meta: "indexKey"}})
[ { _id: 1, a: 'foo', key: { a: 'foo' } } ]
> db.c.find({_id: 1}, {key: {$meta: "indexKey"}})
[ { _id: 1, a: 'foo' } ]
I would have expected:
> db.c.find({_id: 1}, {key: {$meta: "indexKey"}})
[ { _id: 1, a: 'foo', key: { _id: 1 } } ]
> db.c.find({_id: 1}, {key: {$meta: "indexKey"}}).explain().queryPlanner
{
namespace: 'test.c',
indexFilterSet: false,
parsedQuery: { _id: { '$eq': 1 } },
queryHash: '58F0F49D',
planCacheKey: '0028A5F4',
maxIndexedOrSolutionsReached: false,
maxIndexedAndSolutionsReached: false,
maxScansToExplodeReached: false,
winningPlan: {
stage: 'PROJECTION_DEFAULT',
transformBy: { key: { '$meta': 'indexKey' } },
inputStage: { stage: 'IDHACK' }
},
rejectedPlans: []
}
One theory is that IDHACK is not setting the metadata field properly, but this requires further investigation.