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

MongoDB - Trier les résultats d'une requête

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 domaine. Si deux musiciens ou plus jouent du même instrument, le 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'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é :

  1. MinKey (type interne)
  2. Nul
  3. Nombres (entiers, longs, doubles)
  4. Symbole, Chaîne
  5. Objet
  6. Tableau
  7. BinData
  8. ObjectId
  9. Booléen
  10. Date
  11. Horodatage
  12. Expression régulière
  13. 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).