MongoDB Sort() & Limit() upit s redoslijedom prema primjerima

โšก Pametni saลพetak

MongoDB Modifikatori upita Sort() i Limit() kontroliraju koliko dokumenata upit vraฤ‡a i kojim redoslijedom. Metoda limit() ograniฤava broj rezultata, dok sort() sortira dokumente uzlaznim ili silaznim redoslijedom koristeฤ‡i vrijednosti 1 ili -1.

  • ๐Ÿ”ข Ograniฤi rezultate: Metoda limit() ograniฤava koliko dokumenata upit vraฤ‡a, na primjer limit(2) vraฤ‡a dva zapisa.
  • โฌ‡๏ธ Sortiraj silazno: sort({field:-1}) vraฤ‡a dokumente u silaznom redoslijedu odabranog polja.
  • โฌ†๏ธ Sortiraj uzlazno: sort({field:1}) vraฤ‡a dokumente u uzlaznom redoslijedu, ลกto je ujedno i zadani smjer.
  • โญ๏ธ Preskoฤi za straniฤenje: Metoda skip() ignorira odreฤ‘eni broj dokumenata, a u kombinaciji s limit() gradi paginaciju.
  • ๐Ÿงท Viลกe kljuฤeva: sort() prihvaฤ‡a nekoliko polja, sortirajuฤ‡i po prvom kljuฤu i prekidajuฤ‡i veze sa sljedeฤ‡im.
  • ๐Ÿ–จ๏ธ Readable Izlaz: Ulanฤavanje forEach(printjson) ispisuje svaki vraฤ‡eni dokument u ฤistom JSON formatu.

MongoDB Sort() i Limit() upit

ล to su izmjene upita?

MongoDB pruลพa modifikatore upita kao ลกto su klauzula 'limit' i 'Orders' za pruลพanje veฤ‡e fleksibilnosti prilikom izvrลกavanja upita. Pogledat ฤ‡emo sljedeฤ‡e modifikatore upita

MongoDB Ograniฤi rezultate upita

Ovaj modifikator se koristi za ograniฤavanje broja dokumenata koji se vraฤ‡aju u skupu rezultata za upit. Sljedeฤ‡i primjer pokazuje kako se to moลพe uฤiniti.

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

Code Objaลกnjenje

  • Gornji kod preuzima funkciju traลพenja koja vraฤ‡a sve dokumente u kolekciji, ali zatim koristi klauzulu o ograniฤenju da ograniฤi broj dokumenata koji se vraฤ‡aju na samo 2.

Izlaz

Ako je naredba uspjeลกno izvrลกena, prikazat ฤ‡e se sljedeฤ‡i izlaz

MongoDB Ograniฤi rezultate upita

Izlaz jasno pokazuje da, buduฤ‡i da postoji modifikator ograniฤenja, vraฤ‡aju se najviลกe samo 2 zapisa kao dio skupa rezultata na temelju ObjectId-a uzlaznim redoslijedom.

MongoDB Poredaj prema silaznom redoslijedu

Moลพe se odrediti redoslijed dokumenata koji se vraฤ‡aju na temelju uzlaznog ili silaznog redoslijeda bilo kojeg kljuฤa u zbirci. Sljedeฤ‡i primjer pokazuje kako se to moลพe uฤiniti.

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

Code Objaลกnjenje

  • Gornji kod preuzima funkciju sortiranja koja vraฤ‡a sve dokumente u kolekciji, ali zatim koristi modifikator za promjenu redoslijeda vraฤ‡anja zapisa. Ovdje -1 oznaฤava da ลพelimo vratiti dokumente na temelju silaznog redoslijeda ID-a zaposlenika.

Ako je naredba uspjeลกno izvrลกena, prikazat ฤ‡e se sljedeฤ‡i izlaz

Izlaz

MongoDB Poredaj prema silaznom redoslijedu

Izlaz jasno prikazuje dokumente koji se vraฤ‡aju silaznim redoslijedom Employeeid.

Uzlazni poredak definiran je vrijednoลกฤ‡u 1.

MongoDB Sortiraj po rastuฤ‡em redoslijedu

Kao ลกto sort() moลพe vratiti dokumente u silaznom redoslijedu, moลพe ih vratiti i u uzlaznom redoslijedu. Uzlazni redoslijed definiran je vrijednoลกฤ‡u 1 u objektu sort. Ovo sortira dokumente od najmanje do najveฤ‡e vrijednosti, ลกto je korisno za popisivanje zapisa od najstarijeg do najnovijeg ili od A do ลฝ.

Sljedeฤ‡i primjer sortira svaki dokument zaposlenika prema Employeeid-u u rastuฤ‡em redoslijedu:

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

Evo kako upit funkcionira:

  • find() dohvaฤ‡a sve dokumente u kolekciji Employee.
  • sort({Employeeid:1}) sortira rezultate prema polju Employeeid, od najniลพeg do najviลกeg ID-a.
  • forEach(printjson) ispisuje svaki dokument u ฤitljivom JSON formatu.

Kada pokrenete ovu naredbu, dokumenti se prikazuju u rastuฤ‡em redoslijedu Employeeid-a. Uzlazni redoslijed je takoฤ‘er zadani smjer, pa ostavljanje vrijednosti kao 1 daje redoslijed od najniลพe prema najviลกoj vrijednosti u odabranom polju. Da biste obrnuli rezultat, jednostavno promijenite vrijednost s 1 na -1, a moลพete i ulanฤati limit() da biste vratili samo prvih nekoliko sortiranih zapisa.

MongoDB Skip() za paginaciju

Metoda skip() govori MongoDB ignorirati odreฤ‘eni broj dokumenata prije vraฤ‡anja ostatka. Sam po sebi, skip() rijetko je koristan, ali u kombinaciji s limit() stvara paginaciju, omoguฤ‡ujuฤ‡i vam prikaz rezultata jednu po jednu stranicu.

Sljedeฤ‡i primjer preskaฤe prva dva zaposlenika i vraฤ‡a sljedeฤ‡a dva:

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

Za izradu navigacije stranica po stranica, slijedite ovaj obrazac:

  1. Odredite veliฤinu stranice, na primjer 2 dokumenta po stranici.
  2. Pomnoลพite veliฤinu stranice s brojem stranice minus jedan da biste dobili vrijednost preskakanja.
  3. Proslijedite tu vrijednost funkciji skip(), a veliฤinu stranice funkciji limit().

Na primjer, stranica 1 koristi skip(0).limit(2), stranica 2 koristi skip(2).limit(2), a stranica 3 koristi skip(4).limit(2). Uvijek dodajte i sort() kako bi redoslijed dokumenata ostao stabilan na svim stranicama. Imajte na umu da vrlo velike vrijednosti skip-a mogu biti spore na velikim kolekcijama, jer MongoDB i dalje skenira i odbacuje preskoฤene dokumente; paginacija temeljena na rasponu je brลพa u veฤ‡em opsegu.

Sortiraj po viลกe polja u MongoDB

MongoDB moลพe sortirati po viลกe polja istovremeno. Polja u objektu sortiranja navodite po prioritetu i MongoDB sortira po prvom polju, zatim koristi sljedeฤ‡e polje za prekid veza i tako dalje.

Sljedeฤ‡i primjer sortira zaposlenike po imenu u uzlaznom redoslijedu, a za zaposlenike s istim imenom, po ID-u zaposlenika u silaznom redoslijedu:

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

Redoslijed kljuฤeva u objektu sortiranja je vaลพan: EmployeeName se primjenjuje prvi jer se prvi pojavljuje. Ovo sortiranje s viลกe kljuฤeva korisno je za izvjeลกฤ‡a u kojima grupirate po jednom polju, a zatim rangirate unutar svake grupe. Za najbolje performanse na velikim kolekcijama, stvorite sloลพeni indeks koji odgovara poljima i smjerovima koriลกtenim u sortiranju.

Pitanja i odgovori

Bez sort(), MongoDB vraฤ‡a dokumente prirodnim redoslijedom, koji obiฤno odraลพava njihov redoslijed na disku i nije zajamฤen. Za predvidljiv redoslijed, uvijek dodajte eksplicitnu sort() na polje poput _id.

Logiฤki, MongoDB Uvijek primjenjuje sort() prije limit(), bez obzira na redoslijed kojim ih povezujete. To znaฤi da limit() vraฤ‡a gornje dokumente sortiranog rezultata, a ne sluฤajni podskup koji se zatim sortira.

Sortiranje velikih skupova rezultata bez indeksa prisiljava sortiranje u memoriji, koje ne uspijeva kada se premaลกi ograniฤenje memorije. Stvaranje indeksa na polju za sortiranje omoguฤ‡uje MongoDB uฤinkovito vraฤ‡ati ureฤ‘ene rezultate.

Umjetna inteligencija moลพe pretvoriti obiฤan zahtjev poput 'najnoviji pet zaposlenika' u upit find().sort().limit() s ispravnim smjerom i brojem. Takoฤ‘er objaลกnjava svaki modifikator kako bi poฤetnici nauฤili obrazac.

Da. Umjetna inteligencija moลพe pregledati plan upita, otkriti sortiranja u memoriji i preporuฤiti indeks potreban za podrลกku sortiranja. To pomaลพe programerima ubrzati sortiranje i ograniฤiti upite na velikim kolekcijama.

Saลพmite ovu objavu uz: