MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB - Sortieren Sie die Ergebnisse einer Abfrage

In MongoDB können Sie die Ergebnisse einer Abfrage mithilfe von limit() sortieren Methode.

In MongoDB, wenn Sie eine Sammlung mit db.collection.find() abfragen -Methode können Sie sort() anhängen -Methode, um anzugeben, wie die Ergebnisse sortiert werden sollen. Die sort() Methode gibt eine Sortierreihenfolge für den Cursor an.

Bei Verwendung von sort() -Methode müssen Sie die Sortierreihenfolge als Parameter angeben. Dies muss ein JSON-Dokument sein, das die Sortierreihenfolge definiert. Es enthält normalerweise ein oder mehrere Felder, denen jeweils entweder 1 folgt oder -1 , je nachdem ob aufsteigend oder absteigend sortiert werden soll.

Beispiel

Lassen Sie uns zuerst eine Abfrage ohne durchführen mit sort() (damit wir die natürliche Sortierreihenfolge sehen können):

Ohne sort()

db.musicians.find( )

Ergebnis:

{ "_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 }

Mit sort() in aufsteigender Reihenfolge

Ein Wert von 1 neben einem Feldnamen gibt an, dass die Dokumente nach dem angegebenen Feld in aufsteigender Reihenfolge sortiert werden sollen.

Hier sortieren wir die Ergebnisse nach Namen in aufsteigender Reihenfolge:

db.musicians.find( ).sort( { name: 1 } )

Ergebnis:

{ "_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 }

Mit sort() in absteigender Reihenfolge

Ein Wert von -1 neben einem Feldnamen gibt die absteigende Reihenfolge an.

Hier sortieren wir die Ergebnisse nach Namen in absteigender Reihenfolge:

db.musicians.find( ).sort( { name: -1 } )

Ergebnis:

{ "_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 }

Mehrere Felder

Sie können nach mehreren Feldern sortieren. Trennen Sie einfach jedes Feld durch ein Komma. Wenn Sie dies tun, werden die Dokumente nach dem ersten angegebenen Feld sortiert, dann nach dem nächsten und so weiter.

Hier sortieren wir nach dem Instrument gefolgt von born Feld. Wenn zwei oder mehr Musiker dasselbe Instrument spielen, wird der geborene Feld bestimmt, wie sie werden relativ zueinander sortiert.

db.musicians.find( ).sort( { instrument: 1, born: 1 } )

Ergebnis:

{ "_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 }

Und nur um zu sehen, wie sich das zweite Feld auf die Reihenfolge auswirkt, schalten Sie es auf einen negativen Wert (absteigend):

db.musicians.find( ).sort( { instrument: 1, born: -1 } )

Ergebnis:

{ "_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" }

Mit Limit sortieren

Sie können sort() verwenden mit limit() um die Ergebnisse der begrenzten Ergebnismenge zu sortieren.

Hier beschränken wir die Ergebnisse auf 3 Dokumente:

db.musicians.find( ).limit(3).sort( { name: 1, born: -1 } )

Ergebnis:

{ "_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 }

Wenn wir name wechseln in absteigender Reihenfolge:

db.musicians.find( ).limit(3).sort( { name: -1, born: -1 } )

Ergebnis:

{ "_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 }

Beachten Sie, dass in diesem Fall born hat keine Auswirkung, da es nie mehr als ein Ergebnis für einen bestimmten Namen gibt.

Vergleich verschiedener Typen

Beim Vergleichen von Werten verschiedener BSON-Typen verwendet MongoDB die folgende Vergleichsreihenfolge, vom niedrigsten zum höchsten:

  1. MinKey (interner Typ)
  2. Null
  3. Zahlen (ints, longs, doubles)
  4. Symbol, Zeichenfolge
  5. Objekt
  6. Array
  7. BinData
  8. Objekt-ID
  9. Boolean
  10. Datum
  11. Zeitstempel
  12. Regulärer Ausdruck
  13. MaxKey (interner Typ)

Beachten Sie, dass nicht vorhandene Felder wie ein Nullwert (oder leeres BSON-Objekt) behandelt werden.