MongoDB Sort() & Limit() fråga med ordning efter exempel

⚡ Smart sammanfattning

MongoDB Frågemodifierarna Sort() och Limit() styr hur många dokument en fråga returnerar och i vilken ordning. Metoden limit() begränsar antalet resultat, medan sort() ordnar dokument i stigande eller fallande ordning med värdena 1 eller -1.

  • 🔢 Begränsa resultat: Metoden limit() begränsar hur många dokument en fråga returnerar, till exempel returnerar limit(2) två poster.
  • ⬇️ Sortera fallande: sort({field:-1}) returnerar dokument i fallande ordning efter det valda fältet.
  • ⬆️ Sortera stigande: sort({field:1}) returnerar dokument i stigande ordning, vilket också är standardriktningen.
  • ⏭️ Hoppa över för personsökning: Metoden skip() ignorerar ett antal dokument, och i kombination med limit() bygger den paginering.
  • 🧷 Flera nycklar: sort() accepterar flera fält, sorterar efter den första nyckeln och bryter kopplingen till nästa.
  • 🖨️ Readable Produktion: Chaining forEach(printjson) skriver ut varje returnerat dokument i rent JSON-format.

MongoDB Sort() & Limit()-fråga

Vad är frågeändringar?

MongoDB tillhandahåller frågemodifierare som "limit" och "Orders"-satsen för att ge mer flexibilitet vid exekvering av frågor. Vi kommer att ta en titt på följande frågemodifierare

MongoDB Begränsa frågeresultat

Denna modifierare används för att begränsa antalet dokument som returneras i resultatuppsättningen för en fråga. Följande exempel visar hur detta kan göras.

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

Code Förklaring

  • Ovanstående kod tar sökfunktionen som returnerar alla dokument i samlingen men använder sedan limitsatsen för att begränsa antalet dokument som returneras till bara 2.

Produktion

Om kommandot utförs framgångsrikt kommer följande utdata att visas

MongoDB Begränsa frågeresultat

Utdata visar tydligt att eftersom det finns en gränsmodifierare, så returneras högst bara 2 poster som en del av resultatuppsättningen baserat på ObjectId i stigande ordning.

MongoDB Sortera efter fallande ordning

Man kan specificera ordningen på dokument som ska returneras baserat på stigande eller fallande ordning för valfri nyckel i samlingen. Följande exempel visar hur detta kan göras.

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

Code Förklaring

  • Ovanstående kod tar sorteringsfunktionen som returnerar alla dokument i samlingen men sedan använder modifieraren för att ändra ordningen i vilken posterna returneras. Här indikerar -1 att vi vill returnera dokumenten baserat på den fallande ordningen för anställd-id.

Om kommandot utförs framgångsrikt kommer följande utdata att visas

Produktion

MongoDB Sortera efter fallande ordning

Utdata visar tydligt att dokumenten returneras i fallande ordning för den anställde.

Stigande ordning definieras av värde 1.

MongoDB Sortera efter stigande ordning

Precis som sort() kan returnera dokument i fallande ordning, kan det också returnera dem i stigande ordning. Stigande ordning definieras av värdet 1 i sorteringsobjektet. Detta ordnar dokument från det minsta värdet till det största, vilket är användbart för att lista poster från äldst till nyast eller från A till Ö.

Följande exempel sorterar alla medarbetardokument efter Employee-id i stigande ordning:

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

Så här fungerar frågan:

  • find() hämtar alla dokument i Employee-samlingen.
  • sort({Employeeid:1}) sorterar resultaten efter fältet Employeeid, från det lägsta id:t till det högsta.
  • forEach(printjson) skriver ut varje dokument i läsbar JSON.

När du kör det här kommandot visas dokumenten i stigande ordning efter Employeeid. Stigande är också standardriktningen, så om du lämnar värdet 1 får du en låg-till-hög ordning för det valda fältet. För att vända resultatet ändrar du helt enkelt värdet från 1 till -1, och du kan också kedja limit() för att returnera endast de första sorterade posterna.

MongoDB Skip() för paginering

Metoden skip() berättar MongoDB att ignorera ett givet antal dokument innan resten returneras. Skip() är sällan användbart på egen hand, men i kombination med limit() skapar det paginering, vilket låter dig visa resultaten en sida i taget.

Följande exempel hoppar över de två första anställda och returnerar de två nästa:

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

För att bygga navigering sida för sida, följ detta mönster:

  1. Bestäm sidstorleken, till exempel 2 dokument per sida.
  2. Multiplicera sidstorleken med sidnumret minus ett för att få överhoppningsvärdet.
  3. Skicka det värdet till skip() och sidstorleken till limit().

Till exempel använder sida 1 skip(0).limit(2), sida 2 använder skip(2).limit(2) och sida 3 använder skip(4).limit(2). Lägg alltid till en sort() också, så att dokumentens ordning förblir stabil över sidorna. Observera att mycket stora skip-värden kan vara långsamma på stora samlingar, eftersom MongoDB skannar och ignorerar fortfarande de hoppade dokumenten; intervallbaserad paginering är snabbare i stor skala.

Sortera efter flera fält i MongoDB

MongoDB kan sortera efter mer än ett fält åt gången. Du listar fälten i sorteringsobjektet i prioritetsordning, och MongoDB sorterar efter det första fältet, använder sedan nästa fält för att bryta kopplingar, och så vidare.

Följande exempel sorterar anställda efter namn i stigande ordning, och för anställda med samma namn, efter EmployeeID i fallande ordning:

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

Ordningen på nycklarna i sorteringsobjektet spelar roll: EmployeeName tillämpas först eftersom det visas först. Denna sortering med flera nycklar är användbar för rapporter där du grupperar efter ett fält och sedan rangordnar inom varje grupp. För bästa prestanda på stora samlingar, skapa ett sammansatt index som matchar fälten och riktningarna som används i sorteringen.

Vanliga frågor

Utan sortering(), MongoDB returnerar dokument i naturlig ordning, vilket vanligtvis återspeglar deras ordning på disken och inte är garanterad. För en förutsägbar ordning, lägg alltid till en explicit sort() i ett fält som _id.

logiskt, MongoDB tillämpar alltid sort() före limit(), oavsett i vilken ordning du länkar dem. Det betyder att limit() returnerar de översta dokumenten i det sorterade resultatet, inte en slumpmässig delmängd som sedan sorteras.

Att sortera stora resultatmängder utan ett index tvingar fram en sortering i minnet, vilket misslyckas när minnesgränsen överskrids. Att skapa ett index på sorteringsfältet låter MongoDB returnera beställda resultat effektivt.

AI kan omvandla en vanlig förfrågan som "nyaste fem anställda" till en find().sort().limit()-fråga med rätt riktning och antal. Den förklarar också varje modifierare så att nybörjare lär sig mönstret.

Ja. AI kan inspektera en frågeplan, identifiera sorteringar i minnet och rekommendera det index som behövs för att stödja sorteringen. Detta hjälper utvecklare att snabba upp sorteringen och begränsa frågor på stora samlingar.

Sammanfatta detta inlägg med: