Dans MongoDB, vous pouvez trier les résultats d'une requête en utilisant le limit()
méthode.
Dans MongoDB, lorsque vous interrogez une collection à l'aide de db.collection.find()
méthode, vous pouvez ajouter le sort()
méthode pour spécifier comment les résultats doivent être triés. Le sort()
spécifie un ordre de tri pour le curseur.
Lors de l'utilisation de sort()
, vous devez fournir l'ordre de tri en tant que paramètre. Il doit s'agir d'un document JSON qui définit l'ordre de tri. Il contiendra généralement un ou plusieurs champs, chacun suivi soit de 1
ou -1
, selon que le tri doit être en ordre croissant ou décroissant.
Exemple
Faisons d'abord une requête sans en utilisant sort()
(afin que nous puissions voir l'ordre de tri naturel) :
Sans sort()
db.musicians.find( )
Résultat :
{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }
Avec sort()
par ordre croissant
Une valeur de 1
à côté d'un nom de champ spécifie que les documents doivent être triés par le champ spécifié dans l'ordre croissant.
Ici, nous trions les résultats par nom dans l'ordre croissant :
db.musicians.find( ).sort( { name: 1 } )
Résultat :
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }
Avec sort()
par ordre décroissant
Une valeur de -1
à côté d'un nom de champ spécifie l'ordre décroissant.
Ici, nous trions les résultats par nom dans l'ordre décroissant :
db.musicians.find( ).sort( { name: -1 } )
Résultat :
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
Champs multiples
Vous pouvez trier par plusieurs champs. Séparez simplement chaque champ par une virgule. Lorsque vous faites cela, les documents seront triés par le premier champ spécifié, puis le suivant, et ainsi de suite.
Ici, nous trions par instrument champ, suivi du né domaine. Si deux musiciens ou plus jouent du même instrument, le né champ détermine comment ils sont triés les uns par rapport aux autres.
db.musicians.find( ).sort( { instrument: 1, born: 1 } )
Résultat :
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Et juste pour voir comment le deuxième champ peut affecter l'ordre, passez-le à une valeur négative (décroissante) :
db.musicians.find( ).sort( { instrument: 1, born: -1 } )
Résultat :
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
Trier avec limite
Vous pouvez utiliser sort()
avec limit()
pour trier les résultats du jeu de résultats limité.
Ici on limite les résultats à 3 documents :
db.musicians.find( ).limit(3).sort( { name: 1, born: -1 } )
Résultat :
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
Si nous changeons de nom dans l'ordre décroissant :
db.musicians.find( ).limit(3).sort( { name: -1, born: -1 } )
Résultat :
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
Notez que dans ce cas, né n'a aucun effet, car il n'y a jamais plus d'un résultat pour un nom donné.
Comparer différents types
Lors de la comparaison des valeurs de différents types de BSON, MongoDB utilise l'ordre de comparaison suivant, du plus bas au plus élevé :
- MinKey (type interne)
- Nul
- Nombres (entiers, longs, doubles)
- Symbole, Chaîne
- Objet
- Tableau
- BinData
- ObjectId
- Booléen
- Date
- Horodatage
- Expression régulière
- MaxKey (type interne)
Notez que les champs inexistants sont traités de la même manière qu'une valeur nulle (ou un objet BSON vide).