// Check sorting of arrays indexed by key SERVER-2884 t = db.jstests_sort8; t.drop(); t.save( {a:[1,10]} ); t.save( {a:5} ); unindexedForward = t.find().sort( {a:1} ).toArray(); unindexedReverse = t.find().sort( {a:-1} ).toArray(); t.ensureIndex( {a:1} ); indexedForward = t.find().sort( {a:1} ).hint( {a:1} ).toArray(); indexedReverse = t.find().sort( {a:-1} ).hint( {a:1} ).toArray(); assert.eq( unindexedForward, indexedForward ); assert.eq( unindexedReverse, indexedReverse ); // Sorting is based on array members, not the array itself. assert.eq( [1,10], unindexedForward[ 0 ].a ); assert.eq( [1,10], unindexedReverse[ 0 ].a ); // Now try with a bounds constraint. t.dropIndexes(); unindexedForward = t.find({a:{$gte:5}}).sort( {a:1} ).toArray(); unindexedReverse = t.find({a:{$lte:5}}).sort( {a:-1} ).toArray(); t.ensureIndex( {a:1} ); indexedForward = t.find({a:{$gte:5}}).sort( {a:1} ).hint( {a:1} ).toArray(); indexedReverse = t.find({a:{$lte:5}}).sort( {a:-1} ).hint( {a:1} ).toArray(); assert.eq( unindexedForward, indexedForward ); assert.eq( unindexedReverse, indexedReverse );