MongoDB lajittelee kyselyjen tulokset sort-metodilla ja sivuttaa limit- ja skip-metodeilla — ketjutetaan find-kursoriin. Yhdessä ne hallitsevat tulosten järjestystä ja sivujen palauttamista, mikä on välttämätöntä tulosten näyttämiselle.
MongoDB lajittelee kyselyjen tulokset sort-metodilla ja sivuttaa limit- ja skip-metodeilla — ketjutetaan find-kursoriin. Yhdessä ne hallitsevat tulosten järjestystä ja sivujen palauttamista, mikä on välttämätöntä tulosten näyttämiselle.
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 ottaa dokumentin kenttä:suunta-muodossa (1 nousevasti, -1 laskevasti). Useat kentät tarjoavat tasapeli-murtamisen.
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) palauttaa enintään n dokumenttia; skip(m) ohittaa ensimmäiset m. Yhdessä ne toteuttavat offset-sivutusta (sivu N skip:n ja limit:in kautta).
// ❌ 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);
Ilman sort-metodia dokumenttien järjestys ei ole taattu, joten sivutetut sivut voivat olla epäjohdonmukaisia. Lajittele aina vakaiksi kenttäksi (kuten _id) sivutettaessa.
// ⚠️ 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.
Lajittelu ja sivutus ovat perustavanlaatuisia tietojen hyödylliseen näyttämiseen MongoDB:ssä — tulosten järjestäminen ja hallittavien sivujen palauttaminen ovat lähes universaaleja tarpeita (mikä tahansa luettelo, syöte tai taulukko sovelluksessa), joten niiden ymmärtäminen on välttämätöntä jokapäiväistä osaamista.
sort-metodin (järjestäminen kenttien mukaan 1/-1 kanssa, tasapeli-murtamisella) ja limit/skip-metodien (offset-sivutusta varten — tietojen sivujen palauttaminen) tunteminen kattaa tavanomaiset tarpeet kyselytulosten esittämiseen.
Kaksi käytännön seikkaa ovat erityisen tärkeät: lajittele aina sivutettaessa (ilman sitä dokumenttien järjestys ei ole taattu, jolloin sivut voivat olla epäjohdonmukaisia, päällekkäisiä tai ohittaa dokumentteja — oikea virhe, sama ongelma kuin SQL:ssä), ja ymmärrä, että skip on hidas syvillä sivuilla (sen on skannattava ja ohitettava kaikki edeltävät dokumentit) — joten alueperustainen (kursori) sivutus (käyttäen viimeistä näkemää _id:tä seuraavan sivun hakemiseen, hyödyntäen indeksiä ilman ohitusta) on paljon tehokkaampi suurille tietojoukoille, arvokas suorituskykytekniikka.
Tietäminen, että indeksoiduilla kentillä lajittelu on tehokasta, kun taas suuret indeksoimattomat lajittelut voivat olla hitaita tai epäonnistua (muistissa olevan lajittelun rajoitukset) on myös tärkeää — indeksoi kentät, joita lajittelet.
Koska lajittelu ja sivutus vaaditaan virtuaalisesti kaikelle tietojen esittämiselle, ja koska johdonmukaisuusvaatimus (lajittelu vakaan sivutuksen kannalta) ja suorituskykynäkökulmat (skip vs alueperustainen sivutus, indeksoidut lajittelut) vaikuttavat suoraan oikeellisuuteen ja nopeuteen, MongoDB-lajittelun ja sivutuksen ymmärtäminen — sort, offset-sivutus skip/limit:illä, vakaan lajittelun vaatimus, tehokas alueperustainen vaihtoehto ja lajittelukentän indeksointi — on välttämätöntä, usein sovellettavaa osaamista MongoDB-tietojen tehokkaalle ja suorituskykyiselle esittämiselle sovelluksissa.
Kirjasto IT-haastattelukysymyksiä yksityiskohtaisine vastauksineen — Juniorista Senioriin.
Lahjoita