MongoDB Sort() & Limit() lekérdezés Példák szerinti sorrenddel

⚡ Okos összefoglaló

MongoDB A Sort() és Limit() lekérdezésmódosítók szabályozzák, hogy egy lekérdezés hány dokumentumot ad vissza, és milyen sorrendben. A limit() metódus korlátozza az eredmények számát, míg a sort() a dokumentumokat növekvő vagy csökkenő sorrendbe rendezi 1 vagy -1 értékek használatával.

  • 🔢 Limit eredmények: A limit() metódus korlátozza, hogy egy lekérdezés hány dokumentumot ad vissza, például a limit(2) két rekordot ad vissza.
  • ⬇️ Csökkenő rendezés: A sort({field:-1}) függvény a kiválasztott mező szerinti csökkenő sorrendben adja vissza a dokumentumokat.
  • ⬆️ Növekvő rendezés: A sort({field:1}) függvény növekvő sorrendben adja vissza a dokumentumokat, ami egyben az alapértelmezett irány is.
  • ⏭️ Lapozás kihagyása: A skip() metódus számos dokumentumot figyelmen kívül hagy, és a limit() metódussal kombinálva lapozást hoz létre.
  • 🧷 Több kulcs: A sort() függvény több mezőt is elfogad, az első kulcs szerint rendez, és a következővel való kapcsolatokat megszakítja.
  • 🖨️ Readable output: A chaining forEach(printjson) függvény minden visszaadott dokumentumot tiszta JSON formátumban nyomtat ki.

MongoDB Rendezés() és Limit() lekérdezés

Mi a lekérdezés módosítása?

MongoDB lekérdezésmódosítókat biztosít, például a 'limit' és 'Orders' záradékot, hogy nagyobb rugalmasságot biztosítson a lekérdezések végrehajtása során. A következő lekérdezésmódosítókat tekintjük át

MongoDB Lekérdezési eredmények korlátozása

Ez a módosító arra szolgál, hogy korlátozza a lekérdezés eredménykészletében visszaadott dokumentumok számát. A következő példa bemutatja, hogyan lehet ezt megtenni.

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

Code Magyarázat

  • A fenti kód a kereső funkciót veszi át, amely a gyűjteményben lévő összes dokumentumot visszaadja, de a limitzáradékkal korlátozza a visszaküldendő dokumentumok számát 2-re.

teljesítmény

Ha a parancs sikeresen végrehajtásra került, a következő kimenet jelenik meg

MongoDB Lekérdezési eredmények korlátozása

A kimenet jól mutatja, hogy mivel van limit módosító, így legfeljebb 2 rekordot ad vissza az eredményhalmaz részeként az ObjectId alapján növekvő sorrendben.

MongoDB Rendezés Csökkenő sorrend szerint

Megadható a visszaküldendő dokumentumok sorrendje a gyűjtemény bármely kulcsának növekvő vagy csökkenő sorrendje alapján. A következő példa bemutatja, hogyan lehet ezt megtenni.

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

Code Magyarázat

  • A fenti kód a rendezési függvényt veszi fel, amely a gyűjteményben lévő összes dokumentumot visszaadja, majd a módosító segítségével módosítja a rekordok visszaküldésének sorrendjét. Itt a -1 azt jelzi, hogy az alkalmazotti azonosító csökkenő sorrendje alapján szeretnénk visszaküldeni a bizonylatokat.

Ha a parancs sikeresen végrehajtásra került, a következő kimenet jelenik meg

teljesítmény

MongoDB Rendezés Csökkenő sorrend szerint

A kimenet jól láthatóan mutatja a visszaküldött dokumentumokat az Employeeid csökkenő sorrendjében.

A növekvő sorrendet az 1 érték határozza meg.

MongoDB Rendezés növekvő sorrend szerint

Ahogy a sort() függvény képes csökkenő sorrendben visszaadni a dokumentumokat, úgy növekvő sorrendben is. A növekvő sorrendet a rendezési objektum 1-es értéke határozza meg. Ez a legkisebb értéktől a legnagyobbig rendezi a dokumentumokat, ami hasznos a rekordok legrégebbitől a legújabbig, vagy A-tól Z-ig történő listázásához.

A következő példa minden alkalmazotti dokumentumot növekvő sorrendbe rendez az Alkalmazotti azonosító alapján:

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

Így működik a lekérdezés:

  • A find() függvény lekéri az Employee gyűjteményben található összes dokumentumot.
  • A sort({Employeeid:1}) az eredményeket az Alkalmazotti azonosító mező alapján rendezi el, a legalacsonyabb azonosítótól a legmagasabbig.
  • A forEach(printjson) minden dokumentumot olvasható JSON formátumban nyomtat ki.

A parancs futtatásakor a dokumentumok EmployeeID szerint növekvő sorrendben jelennek meg. A növekvő sorrend az alapértelmezett, tehát ha az értéket 1-en hagyjuk, akkor a kiválasztott mezőben a sorrend alacsonytól magasig terjed. Az eredmény megfordításához egyszerűen módosítsa az értéket 1-ről -1-re, és a limit() függvényt láncba is kötheti, hogy csak az első néhány rendezett rekordot adja vissza.

MongoDB Skip() a lapozáshoz

A skip() metódus megmondja MongoDB hogy egy adott számú dokumentumot figyelmen kívül hagyjon a többi visszaadása előtt. Önmagában a skip() ritkán hasznos, de a limit()-tel kombinálva oldalszámozást hoz létre, lehetővé téve az eredmények egyenkénti megjelenítését.

A következő példa kihagyja az első két alkalmazottat, és a következő kettőt adja vissza:

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

Az oldalankénti navigáció létrehozásához kövesse ezt a mintát:

  1. Határozza meg az oldalméretet, például 2 dokumentum oldalanként.
  2. Szorozd meg az oldalméretet az oldalszám mínusz eggyel, hogy megkapd a kihagyási értéket.
  3. Add át ezt az értéket a skip()-nek, az oldalméretet pedig a limit()-nek.

Például az 1. oldal a skip(0).limit(2), a 2. oldal a skip(2).limit(2), a 3. oldal pedig a skip(4).limit(2) függvényt használja. Mindig adjunk hozzá egy sort() függvényt is, hogy a dokumentumok sorrendje stabil maradjon az oldalak között. Fontos megjegyezni, hogy a nagyon nagy skip értékek lassúak lehetnek nagy gyűjtemények esetén, mert MongoDB továbbra is beolvassa és elveti a kihagyott dokumentumokat; a tartományalapú oldalszámozás gyorsabban működik nagy léptékben.

Rendezés több mező szerint itt: MongoDB

MongoDB egyszerre több mező alapján is rendezhet. A rendezési objektumban lévő mezőket prioritási sorrendben sorolja fel, és MongoDB az első mező szerint rendez, majd a következő mező alapján döntetlent jelez, és így tovább.

A következő példa név szerint növekvő sorrendbe rendezi az alkalmazottakat, az azonos nevű alkalmazottak esetében pedig az Alkalmazotti azonosító szerint csökkenő sorrendbe:

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

A rendezési objektumban a kulcsok sorrendje számít: az EmployeeName kerül először alkalmazásra, mert az jelenik meg először. Ez a többkulcsos rendezés olyan jelentésekhez hasznos, ahol egy mező szerint csoportosítunk, majd az egyes csoportokon belül rangsorolunk. Nagy gyűjtemények esetén a legjobb teljesítmény érdekében hozz létre egy összetett indexet, amely megfelel a rendezésben használt mezőknek és irányoknak.

GYIK

Sort() nélkül MongoDB A dokumentumot természetes sorrendben adja vissza, ami általában a lemezen lévő sorrendjüket tükrözi, és nem garantált. A kiszámítható sorrend érdekében mindig adjunk hozzá explicit sort() függvényt egy olyan mezőhöz, mint az _id.

logikusan MongoDB A sort() függvényt mindig a limit() előtt alkalmazza, függetlenül a láncba kötés sorrendjétől. Ez azt jelenti, hogy a limit() a rendezett eredmény legfelső szintű dokumentumait adja vissza, nem pedig egy véletlenszerű részhalmazt, amelyet aztán rendez.

Nagy eredményhalmazok index nélküli rendezése memórián belüli rendezést kényszerít ki, amely meghiúsul, ha túllépi a memóriakorlátot. A rendezési mezőn létrehozott index lehetővé teszi MongoDB rendezett eredményeket hatékonyan ad vissza.

A mesterséges intelligencia képes egy egyszerű kérést, például a „legújabb öt alkalmazott” kérést find().sort().limit() lekérdezéssé alakítani a megfelelő irányú és darabszámú lekérdezéssel. Emellett elmagyarázza az egyes módosítókat is, így a kezdők megtanulhatják a mintát.

Igen. A mesterséges intelligencia képes megvizsgálni a lekérdezési tervet, észlelni a memóriában lévő rendezéseket, és javasolni a rendezés támogatásához szükséges indexet. Ez segít a fejlesztőknek felgyorsítani a rendezést és korlátozni a lekérdezéseket nagy gyűjtemények esetén.

Foglald össze ezt a bejegyzést a következőképpen: