Hi Deepak, your example did not contain an array. But if your
subelement is actually an array the sort does not work if there is no
index on it but does sort if there is an index on it. There is an open
JIRA ticket for this.
https://jira.mongodb.org/browse/SERVER-480
A couple of experiments I did
With
db.foo.insert({_id:1,name:'alvin',detailarray:{max:10,min:9}})
db.foo.insert({_id:2,name:'sridhar',detailarray:{max:8,min:9}})
db.foo.insert({_id:3,name:'chris',detailarray:{max:7,min:12}})
db.foo.insert({_id:4,name:'aaron',detailarray:{max:6,min:3}})
if I do a db.foo.find().sort({"detailarray.max":1}) you get the
following irrespective of whether there is an index on detailarray.max
{ "_id" : 4, "name" : "aaron", "detailarray" : { "max" : 6, "min" :
3 } }
{ "_id" : 3, "name" : "chris", "detailarray" : { "max" : 7, "min" :
12 } }
{ "_id" : 2, "name" : "sridhar", "detailarray" : { "max" : 8, "min" :
9 } }
{ "_id" : 1, "name" : "alvin", "detailarray" : { "max" : 10, "min" :
9 } }
If you have
db.foo.insert({_id:1,name:'alvin',detailarray:[{max:10,min:9}]})
db.foo.insert({_id:2,name:'sridhar',detailarray:[{max:8,min:9},{max:
5,min:9}]})
db.foo.insert({_id:3,name:'chris',detailarray:[{max:7,min:12}]})
db.foo.insert({_id:4,name:'aaron',detailarray:[{max:6,min:3}]})
then
db.foo.find().sort({"detailarray.max":1})
gives
{ "_id" : 1, "name" : "alvin", "detailarray" : [ { "max" : 10, "min" :
9 } ] }
{ "_id" : 2, "name" : "sridhar", "detailarray" : [ { "max" : 8,
"min" : 9 }, { "max" : 5, "min" : 9 } ] }
{ "_id" : 3, "name" : "chris", "detailarray" : [ { "max" : 7, "min" :
12 } ] }
{ "_id" : 4, "name" : "aaron", "detailarray" : [ { "max" : 6, "min" :
3 } ] }
without the index
but with the index db.foo.ensureIndex({"detailarray.max":1})
db.foo.find().sort({"detailarray.max":1})
gives
{ "_id" : 2, "name" : "sridhar", "detailarray" : [ { "max" : 8,
"min" : 9 }, { "max" : 5, "min" : 9 } ] }
{ "_id" : 4, "name" : "aaron", "detailarray" : [ { "max" : 6, "min" :
3 } ] }
{ "_id" : 3, "name" : "chris", "detailarray" : [ { "max" : 7, "min" :
12 } ] }
{ "_id" : 1, "name" : "alvin", "detailarray" : [ { "max" : 10, "min" :
9 } ] }
Hope this helps