sql >> Database >  >> NoSQL >> MongoDB

MongoDB - Sorteer de resultaten van een zoekopdracht

In MongoDB kunt u de resultaten van een zoekopdracht sorteren met behulp van de limit() methode.

In MongoDB, wanneer u een verzameling opvraagt ​​met behulp van de db.collection.find() methode, kunt u de sort() . toevoegen methode om aan te geven hoe de resultaten moeten worden gesorteerd. De sort() methode specificeert een sorteervolgorde voor de cursor.

Bij gebruik van de sort() methode, moet u de sorteervolgorde als parameter opgeven. Dit moet een JSON-document zijn dat de sorteervolgorde definieert. Het bevat meestal een of meer velden, elk gevolgd door 1 of -1 , afhankelijk van of de sortering oplopend of aflopend moet zijn.

Voorbeeld

Laten we eerst een zoekopdracht uitvoeren zonder met behulp van sort() (zodat we de natuurlijke sorteervolgorde kunnen zien):

Zonder sort()

db.musicians.find( )

Resultaat:

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

Met sort() in oplopende volgorde

Een waarde van 1 naast een veldnaam geeft aan dat de documenten in oplopende volgorde op het opgegeven veld moeten worden gesorteerd.

Hier sorteren we de resultaten op naam in oplopende volgorde:

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

Resultaat:

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

Met sort() in aflopende volgorde

Een waarde van -1 naast een veldnaam specificeert de aflopende volgorde.

Hier sorteren we de resultaten op naam in aflopende volgorde:

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

Resultaat:

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

Meerdere velden

U kunt sorteren op meerdere velden. Scheid elk veld gewoon door een komma. Wanneer u dit doet, worden de documenten gesorteerd op het eerste opgegeven veld, vervolgens op het volgende, enzovoort.

Hier sorteren we op het instrument veld, gevolgd door de geboren veld. Als twee of meer muzikanten hetzelfde instrument bespelen, wordt de geboren veld bepaalt hoe ze worden ten opzichte van elkaar gesorteerd.

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

Resultaat:

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

En om te zien hoe het tweede veld de volgorde kan beïnvloeden, zet u het op een negatieve waarde (aflopend):

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

Resultaat:

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

Sorteren met limiet

U kunt sort() . gebruiken met limit() om de resultaten van de beperkte resultatenset te sorteren.

Hier beperken we de resultaten tot 3 documenten:

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

Resultaat:

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

Als we naam omwisselen in aflopende volgorde:

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

Resultaat:

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

Merk op dat in dit geval, geboren heeft geen effect, omdat er nooit meer dan één resultaat is voor een bepaalde naam.

Verschillende soorten vergelijken

Bij het vergelijken van waarden van verschillende BSON-typen gebruikt MongoDB de volgende vergelijkingsvolgorde, van laag naar hoog:

  1. MinKey (intern type)
  2. Null
  3. Getallen (ints, longs, doubles)
  4. Symbool, tekenreeks
  5. Object
  6. Array
  7. BinData
  8. Object-ID
  9. Booleaans
  10. Datum
  11. Tijdstempel
  12. Regelmatige expressie
  13. MaxKey (intern type)

Merk op dat niet-bestaande velden op dezelfde manier worden behandeld als een null-waarde (of leeg BSON-object).


  1. Hoe maak ik verbinding met mongodb met node.js (en authenticeer ik)?

  2. Hoe redis-cluster te configureren bij gebruik van spring-data-redis 1.7.0.M1

  3. Hoe de master/slave-status van redis te kennen?

  4. Hoe te pagineren met Mongoose in Node.js?