MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment trier les résultats de la requête mongodb en fonction des sous-documents

Vous pouvez utiliser cursor.sort() pour trier sur plusieurs champs (essentiellement un combo) en même temps, mais je ne pense pas que cela fonctionne lors du tri à la fois sur un document et un champ de sous-document en même temps.Si vous deviez trier sur deux champs différents du document supérieur ou sur deux champs différents d'un sous-document, alors ce serait bien, je suppose.

Ainsi, vous pouvez obtenir une sortie similaire en utilisant l'aggregation cadre. Tout ce que vous avez à faire est de décomposer les tableaux des subs puis sort leur.

Vous pourriez faire quelque chose comme :

db.col.aggregate({$unwind:'subs'}, {$sort:{id:1,'subs.time':1}});

Avec le code ci-dessus, vous devriez obtenir une sortie similaire à celle-ci :

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