I MongoDB kan du sortere resultaterne af en forespørgsel ved at bruge limit()
metode.
I MongoDB, når du forespørger en samling ved hjælp af db.collection.find()
metode, kan du tilføje sort()
metode til at specificere, hvordan resultaterne skal sorteres. sort()
metoden angiver en sorteringsrækkefølge for markøren.
Når du bruger sort()
metode, skal du angive sorteringsrækkefølgen som en parameter. Dette skal være et JSON-dokument, der definerer sorteringsrækkefølgen. Det vil typisk indeholde et eller flere felter, hver efterfulgt af enten 1
eller -1
, alt efter om sorteringen skal være i stigende eller faldende rækkefølge.
Eksempel
Lad os først lave en forespørgsel uden ved hjælp af sort()
(så vi kan se den naturlige sorteringsrækkefølge):
Uden sort()
db.musicians.find( )
Resultat:
{ "_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 }
Med sort()
i stigende rækkefølge
En værdi på 1
ud for et feltnavn angiver, at dokumenterne skal sorteres efter det angivne felt i stigende rækkefølge.
Her sorterer vi resultaterne efter navn i stigende rækkefølge:
db.musicians.find( ).sort( { name: 1 } )
Resultat:
{ "_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 }
Med sort()
i faldende rækkefølge
En værdi på -1
ud for et feltnavn angiver faldende rækkefølge.
Her sorterer vi resultaterne efter navn i faldende rækkefølge:
db.musicians.find( ).sort( { name: -1 } )
Resultat:
{ "_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 }
Flere felter
Du kan sortere efter flere felter. Bare adskil hvert felt med et komma. Når du gør dette, vil dokumenterne blive sorteret efter det første angivne felt, derefter det næste, og så videre.
Her sorterer vi efter instrumentet felt efterfulgt af født Mark. Hvis to eller flere musikere spiller det samme instrument, er den fødte feltet bestemmer, hvordan de er sorteret i forhold til hinanden.
db.musicians.find( ).sort( { instrument: 1, born: 1 } )
Resultat:
{ "_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 }
Og bare for at se, hvordan det andet felt kan påvirke rækkefølgen, skal du skifte det til en negativ værdi (faldende):
db.musicians.find( ).sort( { instrument: 1, born: -1 } )
Resultat:
{ "_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" }
Sortér med grænse
Du kan bruge sort()
med limit()
for at sortere resultaterne af det begrænsede resultatsæt.
Her begrænser vi resultaterne til 3 dokumenter:
db.musicians.find( ).limit(3).sort( { name: 1, born: -1 } )
Resultat:
{ "_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 }
Hvis vi skifter navn i faldende rækkefølge:
db.musicians.find( ).limit(3).sort( { name: -1, born: -1 } )
Resultat:
{ "_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 }
Bemærk, at i dette tilfælde born har ingen effekt, da der aldrig er mere end ét resultat for et givet navn.
Sammenligning af forskellige typer
Når man sammenligner værdier af forskellige BSON-typer, bruger MongoDB følgende sammenligningsrækkefølge, fra laveste til højeste:
- MinKey (intern type)
- Nul
- Tal (ints, longs, doubles)
- Symbol, streng
- Objekt
- Array
- BinData
- ObjectId
- Boolesk
- Dato
- Tidsstempel
- Regulært udtryk
- MaxKey (intern type)
Bemærk, at ikke-eksisterende felter behandles på samme måde som en nulværdi (eller tomt BSON-objekt).