MongoDB fournit plusieurs façons de trier les documents dans un ordre particulier. Chacun d'eux nous permet de classer les documents par ordre croissant ou décroissant.
Il y a aussi la possibilité de classer les résultats d'un $text
recherche - tri par le textScore
calculé métadonnées par ordre décroissant.
Voici 3 façons de trier les documents dans MongoDB.
Le cursor.sort()
Méthode
Le cursor.sort()
spécifie l'ordre dans lequel la requête renvoie les documents correspondants.
Supposons que nous ayons une collection appelée employees
avec les documents suivants :
{ "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 }
Voici un exemple de retour de ces documents triés par leur salary
champ par ordre croissant, ainsi que leur _id
champ :
db.employees.find().sort( { salary: 1, _id: 1 } )
Résultat :
{ "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
Ici, nous avons utilisé 1
pour l'ordre croissant. Si nous le voulions dans l'ordre décroissant, nous utiliserions simplement -1
à la place.
La raison pour laquelle j'ai inclus le _id
champ dans la commande est parce que, si deux employés ou plus ont le même salaire, alors le _id
peut être utilisé pour trier ces documents entre eux.
Bien que cela puisse sembler trivial, cela empêchera MongoDB de renvoyer ces documents dans un ordre différent à chaque fois que nous exécuterons la requête.
Vous pouvez également trier les résultats d'un $text
chercher. Voir MongoDB sort()
pour un exemple.
Le $sort
Étape du pipeline d'agrégation
Lorsque vous utilisez le framework de pipeline d'agrégation, vous pouvez utiliser le $sort
pour trier tous les documents d'entrée et les renvoyer dans le pipeline dans l'ordre trié.
Voici comment nous pouvons utiliser $sort
pour retourner le même résultat que l'exemple précédent. Sauf, trions-les par décroissant commandez cette fois :
db.employees.aggregate(
[
{ $sort : { salary : -1, _id: 1 } }
]
)
Résultat :
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 6, "name" : "Homer", "salary" : 1 }
Vous pouvez également trier les résultats d'un $text
chercher. Voir MongoDB $sort
pour un exemple.
Le $orderBy
Modificateur de requête
Le $orderBy
Le modificateur de requête peut être utilisé sous l'une des deux formes.
Comme ceci :
db.employees.find( { $query: {}, $orderBy: { salary: 1 } } )
Ou comme ceci ::
db.employees.find()._addSpecial( "$orderby", { salary : 1 } )
Le $orderBy
le modificateur de requête est obsolète dans le mongo
shell depuis la v3.2, mais j'ai quand même décidé de l'inclure ici. Consultez la documentation MongoDB pour plus d'informations.