sql >> Database teknologi >  >> NoSQL >> MongoDB

3 måder at sortere dokumenter i MongoDB

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.


  1. phpredis-udvidelsen virker ikke, kan ikke indlæse 'redis.so'

  2. Hvad er meningen med REDIS i ELK stakken?

  3. Hvordan returnerer man kun en del af array i MongoDB?

  4. Mongodb Explain for Aggregation framework