MongoDB : Comment trier par plusieurs champs
Vous pouvez utiliser la syntaxe suivante pour trier les documents dans MongoDB selon plusieurs champs :
db.myCollection.find().sort( { "field1": 1, "field2": -1 } )
Ce code particulier trie les documents de la collection appelée myCollection d’abord par champ 1 ascendant, puis par champ 2 décroissant.
Les exemples suivants montrent comment utiliser cette syntaxe avec une équipe de collection avec les documents suivants :
db.teams.insertOne({team: "Mavs", points: 30, rebounds: 8})
db.teams.insertOne({team: "Spurs", points: 30, rebounds: 12})
db.teams.insertOne({team: "Rockets", points: 20, rebounds: 7})
db.teams.insertOne({team: "Warriors", points: 25, rebounds: 5})
db.teams.insertOne({team: "Cavs", points: 25, rebounds: 9})
Exemple 1 : trier par plusieurs champs dans MongoDB (croissant)
Nous pouvons utiliser le code suivant pour trier les documents de la collection des équipes d’abord par « points » croissants puis par « rebonds » croissants :
db.teams.find().sort( { "points": 1, "rebounds": 1 } )
Cette requête renvoie les résultats suivants :
{ _id: ObjectId("61f952c167f1c64a1afb203b"),
team: 'Rockets',
points: 20,
rebounds: 7 }
{ _id: ObjectId("61f952c167f1c64a1afb203c"),
team: 'Warriors',
points: 25,
rebounds: 5 }
{ _id: ObjectId("61f952c167f1c64a1afb203d"),
team: 'Cavs',
points: 25,
rebounds: 9 }
{ _id: ObjectId("61f952c167f1c64a1afb2039"),
team: 'Mavs',
points: 30,
rebounds: 8 }
{ _id: ObjectId("61f952c167f1c64a1afb203a"),
team: 'Spurs',
points: 30,
rebounds: 12 }
A noter que les documents sont triés par champ « points » croissant (du plus petit au plus grand) puis par champ « rebonds » croissant (du plus petit au plus grand).
Exemple 2 : Trier par plusieurs champs dans MongoDB (décroissant)
Nous pouvons utiliser le code suivant pour trier les documents de la collection des équipes d’abord par « points » décroissants puis par « rebonds » décroissants :
db.teams.find().sort( { "points": -1, "rebounds": -1 } )
Cette requête renvoie les résultats suivants :
{ _id: ObjectId("61f952c167f1c64a1afb203a"),
team: 'Spurs',
points: 30,
rebounds: 12 }
{ _id: ObjectId("61f952c167f1c64a1afb2039"),
team: 'Mavs',
points: 30,
rebounds: 8 }
{ _id: ObjectId("61f952c167f1c64a1afb203d"),
team: 'Cavs',
points: 25,
rebounds: 9 }
{ _id: ObjectId("61f952c167f1c64a1afb203c"),
team: 'Warriors',
points: 25,
rebounds: 5 }
{ _id: ObjectId("61f952c167f1c64a1afb203b"),
team: 'Rockets',
points: 20,
rebounds: 7 }
A noter que les documents sont triés par champ « points » décroissant (du plus grand au plus petit) puis par champ « rebonds » décroissant (du plus grand au plus petit).
Remarque : Vous pouvez trouver la documentation complète de la fonction de tri ici .
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans MongoDB :
MongoDB : Comment trier par date
MongoDB : Comment regrouper par et compter
MongoDB : Comment regrouper par plusieurs champs
