MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como classificar os resultados da consulta mongodb com base em subdocumentos


Você pode usar cursor.sort() para classificar em vários campos (basicamente uma combinação) ao mesmo tempo, mas não acho que funcione ao classificar em um documento e em um campo de subdocumento ao mesmo tempo. Se você classificar em dois campos diferentes do documento superior ou em dois campos diferentes de um subdocumento, então seria bom, eu acho.

Assim, você pode obter uma saída semelhante usando a agregação estrutura. Tudo o que você precisa fazer é basicamente dividir as matrizes dos subs campo e, em seguida, classificar eles.

Você poderia fazer algo como:
db.col.aggregate({$unwind:'subs'}, {$sort:{id:1,'subs.time':1}});

Com o código acima, você deve obter uma saída semelhante a esta:
 { 
    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' }
}