MongoDB giver et par måder at sortere dokumenter i en bestemt rækkefølge. Hver af disse giver os mulighed for at bestille dokumenterne i stigende eller faldende rækkefølge.
Der er også mulighed for at bestille resultaterne af en $text
søgning – sortering efter den beregnede textScore
metadata i faldende rækkefølge.
Her er 3 måder at sortere dokumenter på i MongoDB.
cursor.sort()
Metode
cursor.sort()
metode angiver den rækkefølge, som forespørgslen returnerer matchende dokumenter i.
Antag, at vi har en samling kaldet employees
med følgende dokumenter:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 }
Her er et eksempel på returnering af disse dokumenter sorteret efter deres salary
felt i stigende rækkefølge, og også deres _id
felt:
db.employees.find().sort( { salary: 1, _id: 1 } )
Resultat:
{ "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
Her brugte vi 1
for stigende rækkefølge. Hvis vi ville have det i faldende rækkefølge, ville vi blot bruge -1
i stedet.
Grunden til at jeg inkluderede _id
felt i bestillingen skyldes, at hvis to eller flere medarbejdere har samme løn, så er _id
feltet kan bruges til at sortere disse dokumenter indbyrdes.
Selvom dette kan virke trivielt, vil det forhindre MongoDB i at returnere disse dokumenter i en anden rækkefølge, hver gang vi kører forespørgslen.
Du kan også sortere resultaterne af en $text
Søg. Se MongoDB sort()
for et eksempel.
$sort
Aggregation Pipeline Stage
Når du bruger aggregeringspipelinerammerne, kan du bruge $sort
trin for at sortere alle inputdokumenter og returnere dem til pipelinen i sorteret rækkefølge.
Sådan kan vi bruge $sort
for at returnere det samme resultat som det forrige eksempel. Bortset fra, lad os sortere dem i faldende bestil denne gang:
db.employees.aggregate(
[
{ $sort : { salary : -1, _id: 1 } }
]
)
Resultat:
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 6, "name" : "Homer", "salary" : 1 }
Du kan også sortere resultaterne af en $text
Søg. Se MongoDB $sort
for et eksempel.
$orderBy
Forespørgselsmodifikator
$orderBy
query modifier kan bruges i en af to former.
Sådan:
db.employees.find( { $query: {}, $orderBy: { salary: 1 } } )
Eller sådan her::
db.employees.find()._addSpecial( "$orderby", { salary : 1 } )
$orderBy
query modifier er blevet forældet i mongo
shell siden v3.2, men jeg besluttede at inkludere det her alligevel. Se MongoDB-dokumentationen for mere information.