MongoDB Sort() & Limit()-forespørgsel med Sorter efter eksempler

⚡ Smart opsummering

MongoDB Sort() og Limit() forespørgselsmodifikatorer styrer, hvor mange dokumenter en forespørgsel returnerer, og i hvilken rækkefølge. limit() metoden begrænser antallet af resultater, mens sort() arrangerer dokumenter i stigende eller faldende rækkefølge ved hjælp af værdier på 1 eller -1.

  • 🔢 Begræns resultater: Metoden limit() begrænser, hvor mange dokumenter en forespørgsel returnerer, for eksempel returnerer limit(2) to poster.
  • ⬇️ Sortér faldende: sort({field:-1}) returnerer dokumenter i faldende rækkefølge af det valgte felt.
  • ⬆️ Sortér stigende: sort({field:1}) returnerer dokumenter i stigende rækkefølge, hvilket også er standardretningen.
  • ⏭️ Spring over for sidesøgning: Metoden skip() ignorerer et antal dokumenter, og kombineret med limit() opbygger den paginering.
  • 🧷 Flere nøgler: sort() accepterer flere felter, sorterer efter den første nøgle og bryder forbindelsen med den næste.
  • 🖨️ Readable Output: Chaining forEach(printjson) udskriver hvert returnerede dokument i et rent JSON-format.

MongoDB Sort() & Limit() forespørgsel

Hvad er Forespørgselsændringer?

MongoDB giver forespørgselsmodifikatorer såsom "limit" og "Orders" klausulen for at give mere fleksibilitet, når forespørgsler udføres. Vi vil tage et kig på følgende forespørgselsmodifikatorer

MongoDB Begræns forespørgselsresultater

Denne modifikator bruges til at begrænse antallet af dokumenter, der returneres i resultatsættet for en forespørgsel. Følgende eksempel viser, hvordan dette kan gøres.

db.Employee.find().limit(2).forEach(printjson);

Code Forklaring

  • Ovenstående kode tager find-funktionen, som returnerer alle dokumenterne i samlingen, men bruger derefter limit-klausulen til at begrænse antallet af dokumenter, der returneres til kun 2.

Produktion

Hvis kommandoen udføres med succes, vil følgende output blive vist

MongoDB Begræns forespørgselsresultater

Outputtet viser tydeligt, at da der er en grænsemodifikator, så returneres højst kun 2 poster som en del af resultatsættet baseret på ObjectId i stigende rækkefølge.

MongoDB Sorter efter faldende rækkefølge

Man kan specificere rækkefølgen af ​​dokumenter, der skal returneres baseret på stigende eller faldende rækkefølge af enhver nøgle i samlingen. Følgende eksempel viser, hvordan dette kan gøres.

db.Employee.find().sort({Employeeid:-1}).forEach(printjson)

Code Forklaring

  • Ovenstående kode tager sorteringsfunktionen, som returnerer alle dokumenterne i samlingen, men bruger derefter modifikatoren til at ændre rækkefølgen, som posterne returneres i. Her angiver -1, at vi ønsker at returnere dokumenterne baseret på den faldende rækkefølge af medarbejder-id.

Hvis kommandoen udføres med succes, vil følgende output blive vist

Produktion

MongoDB Sorter efter faldende rækkefølge

Outputtet viser tydeligt, at dokumenterne returneres i faldende rækkefølge efter medarbejder.

Stigende rækkefølge er defineret ved værdi 1.

MongoDB Sortér efter stigende rækkefølge

Ligesom sort() kan returnere dokumenter i faldende rækkefølge, kan den også returnere dem i stigende rækkefølge. Stigende rækkefølge er defineret af værdien 1 i sorteringsobjektet. Dette arrangerer dokumenter fra den mindste værdi til den største, hvilket er nyttigt til at liste poster fra ældste til nyeste eller fra A til Å.

Følgende eksempel sorterer alle medarbejderdokumenter efter Employee-id i stigende rækkefølge:

db.Employee.find().sort({Employeeid:1}).forEach(printjson)

Sådan fungerer forespørgslen:

  • find() henter alle dokumenter i Employee-samlingen.
  • sort({Employeeid:1}) sorterer resultaterne efter feltet Employeeid, fra det laveste id til det højeste.
  • forEach(printjson) udskriver hvert dokument i læsbar JSON.

Når du kører denne kommando, vises dokumenterne i stigende rækkefølge efter Employeeid. Stigende er også standardretningen, så hvis værdien er 1, får du en lav-til-høj rækkefølge på det valgte felt. For at vende resultatet om skal du blot ændre værdien fra 1 til -1, og du kan også bruge chain limit() til kun at returnere de første par sorterede poster.

MongoDB Skip() for paginering

skip()-metoden fortæller MongoDB at ignorere et givet antal dokumenter, før resten returneres. Skip() er sjældent nyttigt i sig selv, men kombineret med limit() opretter det paginering, så du kan vise resultaterne én side ad gangen.

Følgende eksempel springer de første to medarbejdere over og returnerer de næste to:

db.Employee.find().skip(2).limit(2).forEach(printjson)

For at opbygge side-for-side navigation skal du følge dette mønster:

  1. Bestem sidestørrelsen, for eksempel 2 dokumenter pr. side.
  2. Gang sidestørrelsen med sidetallet minus en for at få overspringsværdien.
  3. Send den værdi til skip() og sidestørrelsen til limit().

For eksempel bruger side 1 skip(0).limit(2), side 2 bruger skip(2).limit(2), og side 3 bruger skip(4).limit(2). Tilføj altid også en sort(), så rækkefølgen af ​​dokumenter forbliver stabil på tværs af sider. Bemærk, at meget store skip-værdier kan være langsomme på store samlinger, fordi MongoDB scanner og kasserer stadig de oversprungne dokumenter; intervalbaseret paginering er hurtigere i stor skala.

Sortér efter flere felter i MongoDB

MongoDB kan sortere efter mere end ét felt ad gangen. Du angiver felterne i sorteringsobjektet i prioriteret rækkefølge, og MongoDB sorterer efter det første felt og bruger derefter det næste felt til at bryde båndene og så videre.

Følgende eksempel sorterer medarbejdere efter navn i stigende rækkefølge, og for medarbejdere med samme navn efter Employeeid i faldende rækkefølge:

db.Employee.find().sort({EmployeeName:1, Employeeid:-1}).forEach(printjson)

Rækkefølgen af ​​nøgler i sorteringsobjektet er vigtig: EmployeeName anvendes først, fordi det vises først. Denne sortering med flere nøgler er nyttig til rapporter, hvor du grupperer efter ét felt og derefter rangerer inden for hver gruppe. For at opnå den bedste ydeevne på store samlinger skal du oprette et sammensat indeks, der matcher de felter og retninger, der bruges i sorteringen.

Ofte Stillede Spørgsmål

Uden sorter(), MongoDB returnerer dokumenter i naturlig rækkefølge, hvilket normalt afspejler deres rækkefølge på disken og ikke er garanteret. For en forudsigelig rækkefølge skal du altid tilføje en eksplicit sort() på et felt som _id.

Logisk set MongoDB anvender altid sort() før limit(), uanset hvilken rækkefølge du kæder dem sammen. Det betyder, at limit() returnerer de øverste dokumenter i det sorterede resultat, ikke en tilfældig delmængde, der derefter sorteres.

Sortering af store resultatsæt uden et indeks gennemtvinger en sortering i hukommelsen, som mislykkes, når hukommelsesgrænsen overskrides. Oprettelse af et indeks på sorteringsfeltet giver mulighed for MongoDB returnere bestilte resultater effektivt.

AI kan omdanne en almindelig forespørgsel som 'nyeste fem medarbejdere' til en find().sort().limit() forespørgsel med den rigtige retning og antal. Den forklarer også hver modifikator, så begyndere lærer mønsteret at kende.

Ja. AI kan inspicere en forespørgselsplan, registrere sorteringer i hukommelsen og anbefale det indeks, der er nødvendigt for at understøtte sorteringen. Dette hjælper udviklere med at fremskynde sorteringen og begrænse forespørgsler på store samlinger.

Opsummer dette indlæg med: