- 
    Type:Bug 
- 
    Resolution: Done
- 
    Priority:Major - P3 
- 
    Affects Version/s: 2.5.4
- 
    Component/s: Querying
- 
        Minor Change
- 
        ALL
- 
        None
- 
        None
- 
        None
- 
        None
- 
        None
- 
        None
- 
        None
attached smoke test specifies index using the more correct numerical value
{a: 1}instead of using boolean. still get similar results. When the sort spec is not exactly the same as the index spec, the query optimizer fails to come up with a plan that uses the sparse index. query planning output below:
Beginning planning, options = INCLUDE_COLLSCAN 
Canonical query:
ns=test.server11568 limit=0 skip=0
Tree: $and
Sort: { a: true }
Proj: {}
=============================
idx 0 is { _id: 1 }
idx 1 is { a: 1.0 } sparse
Finding relevant indices
rated tree
$and
Planner: outputted 0 indexed solutions.
Planner: outputting a collscan:
SORT
---pattern = { a: true }
---fetched = 1
---sortedByDiskLoc = 0
---getSort = []
Child:
------COLLSCAN
---------ns = test.server11568
--------- filter = $and
---------fetched = 1
---------sortedByDiskLoc = 0
---------getSort = []
not caching runner but returning 2 results
-------------------
2.4.6 (and afaict, since "forever")
> db.example.ensureIndex({title: true}, {sparse: true})
> db.example.insert({name: "Bob", title: "doctor"})
> db.example.insert({name: "Jim"})
> db.example.find().sort({title: true})
{ "_id" : ObjectId("5278370b13b0e338b3511f67"), "name" : "Bob", "title" : "doctor" }
> db.example.find().sort({title: 1})
{ "_id" : ObjectId("5278370b13b0e338b3511f67"), "name" : "Bob", "title" : "doctor" }
>
in master from today (worked fine ~7days ago):
 db.example.ensureIndex({title: true}, {sparse: true})
> db.example.insert({name: "Bob", title: "doctor"})
> db.example.insert({name: "Jim"})
> db.example.find().sort({title: true})
{ "_id" : ObjectId("527836b596870941233e3da8"), "name" : "Bob", "title" : "doctor" }
> db.example.find().sort({title: 1})
{ "_id" : ObjectId("527836bb96870941233e3da9"), "name" : "Jim" }
{ "_id" : ObjectId("527836b596870941233e3da8"), "name" : "Bob", "title" : "doctor" }
>
Suddenly it matters if its 1 or true
- is related to
- 
                    SERVER-8067 incorrect use of sparse index to sort query results -         
- Closed
 
-         
- 
                    SERVER-11064 Stricter validation of index key patterns during index creation and startup -         
- Closed
 
-         
- 
                    SERVER-15287 Query planner sort analysis incorrectly allows index key pattern plugin fields to provide sort -         
- Closed
 
-