sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo ordenar los resultados de la consulta mongodb según los subdocumentos

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' }
}