MongoDB razvrsti rezultate poizvedbe s sort in razdelitev na strani z limit in skip — veriženi na find kazalec. Skupaj obravnavata razvrščanje in vračanje strani podatkov, kar je nujno za prikaz rezultatov.
MongoDB razvrsti rezultate poizvedbe s sort in razdelitev na strani z limit in skip — veriženi na find kazalec. Skupaj obravnavata razvrščanje in vračanje strani podatkov, kar je nujno za prikaz rezultatov.
db.users.find().sort({ age: 1 }); // ascending by age (1 = asc)
db.users.find().sort({ age: -1 }); // descending (-1 = desc)
db.users.find().sort({ country: 1, name: 1 }); // by country, then name (tie-break)
db.users.find().sort({ createdAt: -1 }); // newest first (common)
sort sprejme dokument s poljem:smer (1 naraščajoče, -1 padajoče). Več polj omogoči razreševanje vezi.
db.users.find().sort({ name: 1 }).limit(10); // first 10 (page 1)
db.users.find().sort({ name: 1 }).skip(10).limit(10); // skip 10, take 10 (page 2)
// page N: .skip((N-1) * pageSize).limit(pageSize)
limit(n) vrne največ n dokumentov; skip(m) preskoči prvi m. Skupaj implementirata razdelitev na strani z odmikom (stran N prek skip + limit).
// ❌ pagination without sort → inconsistent order (pages may overlap/skip)
db.users.find().skip(10).limit(10);
// ✅ sort by a stable field for consistent pages
db.users.find().sort({ _id: 1 }).skip(10).limit(10);
Brez sort vrstni red dokumentov ni zagotovljen, zato se strani lahko razlikujejo. Vedno razvrsti po stabilnem polju (kot je _id) pri razdelitvi na strani.
// ⚠️ skip(1000000) must scan/skip a million docs → slow on deep pages
// ✅ range-based (cursor) pagination — far more efficient for large datasets
db.users.find({ _id: { $gt: lastSeenId } }).sort({ _id: 1 }).limit(10);
// → use the last document's _id to fetch the next page (uses the index, no skipping)
Sorting on an INDEXED field is efficient. Sorting a large result set WITHOUT an index
requires an in-memory sort (limited size — can fail/be slow for big sorts).
→ Index fields you sort by.
Razvrščanje in razdelitev na strani sta temeljni za koristno prikaz podatkov v MongoDB — razvrščanje rezultatov in vračanje obvladljivih strani sta skoraj univerzalni potrebi (poljuben seznam, napajalni tok ali tabela v aplikaciji), zato je razumevanje teh funkcionalnosti bistveno vsakodnevno znanje.
Znanje sort (razvrščanje po poljih s 1/-1, z razreševanjem vezi) in limit/skip (za razdelitev na strani z odmikom — vračanje strani podatkov) pokriva običajne potrebe za predstavitev rezultatov poizvedbe.
Dve praktični točki sta posebej pomembni: vedno razvrsti pri razdelitvi na strani (brez tega vrstni red dokumentov ni zagotovljen, kar povzroči nedosledne strani, ki se prekrivajo ali preskakujejo dokumente — prava napaka, enaka kot v SQL), in razumevanje, da je skip počasen na globokih straneh (mora pregledati in preskočiti vse prejšnje dokumente) — zato je razdelitev na strani na osnovi območja (kazalec) (z uporabo zadnjega vidinega _id za pridobitev naslednje strani, z izkoriščanjem indeksa brez preskakovanja) veliko bolj učinkovita za velike nabore podatkov, cenjena tehnika za zmogljivost.
Znanje, da je razvrščanje po indeksiranih poljih učinkovito, medtem ko so veliki neindeksirani razvrsti počasni ali neuspešni (meje razvrščanja v pomnilniku) je tudi pomembno — indeksiraj polja, po katerih razvrščaš.
Ker sta razvrščanje in razdelitev na strani potrebni za praktično vsak prikaz podatkov, in ker zahteve za doslednost (razvrsti za stabilno razdelitev na strani) in upoštevanja zmogljivosti (skip nasproti razdelitvi na strani na osnovi območja, indeksirani razvrsti) neposredno vplivajo na pravilnost in hitrost, je razumevanje razvrščanja in razdelitve na strani v MongoDB — sort, razdelitev na strani z odmikom prek skip/limit, zahteva za stabilno razvrščanje, učinkovita alternativa na osnovi območja in indeksiranje polj razvrščanja — bistveno, pogosto uporabljeno znanje za gradnjo aplikacij, ki prikazujejo MongoDB podatke učinkovito in zmogljivo.