Puedes usar cursor.sort()
para ordenar en varios campos (básicamente un combo) al mismo tiempo, pero no creo que funcione al ordenar en un documento y en un campo de subdocumento al mismo tiempo. Si tuviera que ordenar en dos campos diferentes del documento superior o en dos campos diferentes de un subdocumento, entonces estaría bien, supongo.
Entonces puede obtener un resultado similar usando la agregación
estructura. Todo lo que tienes que hacer es básicamente desglosar las matrices de los subs
y luego sort
a ellos.
Podrías hacer algo como:
db.col.aggregate({$unwind:'subs'}, {$sort:{id:1,'subs.time':1}});
Con el código anterior debería obtener un resultado similar a este:
{
id: 1,
type: 'strs',
subs:
{ time: 1, val: 'ab' }
},{
id: 1,
type: 'strs',
subs:
{ time: 20, val: 'cs' }
},{
id: 1,
type: 'strs',
subs:
{ time: 50, val: 'be' }
},{
id: 2,
type: 'newname',
subs:
{ time: 12, val: 'a' }
},{
id: 2,
type: 'newname',
subs:
{ time: 20, val: 'b' }
},{
id: 2,
type: 'newname',
subs:
{ time: 30, val: 'c' }
}