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

3 façons de trier des documents dans MongoDB

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.