MongoDB Sort() & Limit() dotaz s pořadím podle příkladů

⚡ Chytré shrnutí

MongoDB Modifikátory dotazů Sort() a Limit() řídí, kolik dokumentů dotaz vrací a v jakém pořadí. Metoda limit() omezuje počet výsledků, zatímco sort() řadí dokumenty vzestupně nebo sestupně pomocí hodnot 1 nebo -1.

  • 🔢 Omezení výsledků: Metoda limit() omezuje počet dokumentů, které dotaz vrátí, například limit(2) vrací dva záznamy.
  • ⬇️ Seřadit sestupně: sort({field:-1}) vrací dokumenty v sestupném pořadí podle vybraného pole.
  • ⬆️ Seřadit vzestupně: sort({field:1}) vrací dokumenty ve vzestupném pořadí, což je také výchozí směr.
  • ⏭️ Přeskočit pro stránkování: Metoda skip() ignoruje řadu dokumentů a v kombinaci s metodou limit() vytváří stránkování.
  • 🧷 Více klíčů: sort() přijímá několik polí, třídí podle prvního klíče a přerušuje vazby s dalším.
  • 🖨️ Readable Výstup: Řetězení forEach(printjson) vytiskne každý vrácený dokument v čistém formátu JSON.

MongoDB Dotaz Sort() a Limit()

Co jsou úpravy dotazů?

MongoDB poskytuje modifikátory dotazů, jako je klauzule 'limit' a 'Orders', které poskytují větší flexibilitu při provádění dotazů. Podíváme se na následující modifikátory dotazů

MongoDB Omezit výsledky dotazu

Tento modifikátor se používá k omezení počtu dokumentů, které jsou vráceny ve výsledkové sadě pro dotaz. Následující příklad ukazuje, jak to lze provést.

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

Code Vysvětlení

  • Výše uvedený kód přebírá funkci find, která vrací všechny dokumenty v kolekci, ale pak používá klauzuli omezení k omezení počtu vracených dokumentů na pouhé 2.

Výstup

Pokud je příkaz úspěšně proveden, zobrazí se následující výstup

MongoDB Omezit výsledky dotazu

Výstup jasně ukazuje, že vzhledem k tomu, že existuje modifikátor limitu, jsou vráceny nejvýše pouze 2 záznamy jako součást sady výsledků na základě ObjectId ve vzestupném pořadí.

MongoDB Seřadit podle sestupného pořadí

Je možné určit pořadí dokumentů, které mají být vráceny, na základě vzestupného nebo sestupného pořadí libovolného klíče ve sbírce. Následující příklad ukazuje, jak to lze provést.

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

Code Vysvětlení

  • Výše uvedený kód přebírá funkci řazení, která vrací všechny dokumenty v kolekci, ale poté používá modifikátor ke změně pořadí, ve kterém jsou záznamy vráceny. Zde -1 znamená, že chceme vrátit dokumenty v sestupném pořadí podle ID zaměstnance.

Pokud je příkaz úspěšně proveden, zobrazí se následující výstup

Výstup

MongoDB Seřadit podle sestupného pořadí

Výstup jasně ukazuje dokumenty vracené v sestupném pořadí podle čísla zaměstnance.

Vzestupné pořadí je definováno hodnotou 1.

MongoDB Seřadit vzestupně

Stejně jako sort() může vracet dokumenty v sestupném pořadí, může je vracet i ve vzestupném. Vzestupné pořadí je definováno hodnotou 1 v objektu sort. Tím se dokumenty řadí od nejmenší hodnoty po největší, což je užitečné pro zobrazení záznamů od nejstaršího po nejnovější nebo od A do Z.

Následující příklad seřadí všechny dokumenty zaměstnanců podle EmployeeID vzestupně:

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

Zde je návod, jak dotaz funguje:

  • Funkce find() načte všechny dokumenty v kolekci Employee.
  • sort({Employeeid:1}) seřadí výsledky podle pole Employeeid, od nejnižšího ID po nejvyšší.
  • forEach(printjson) vytiskne každý dokument v čitelném JSON.

Po spuštění tohoto příkazu se dokumenty zobrazí vzestupně podle EmployeeID. Vzestupné je také výchozí směr, takže ponechání hodnoty 1 zajistí pořadí od nejnižšího k nejvyššímu ve vybraném poli. Chcete-li výsledek obrátit, jednoduše změňte hodnotu z 1 na -1 a můžete také použít řetězec limit() pro vrácení pouze prvních několika seřazených záznamů.

MongoDB Skip() pro stránkování

Metoda skip() říká MongoDB ignorovat daný počet dokumentů před vrácením zbytku. Samotná funkce skip() je zřídka užitečná, ale v kombinaci s funkcí limit() vytváří stránkování, které umožňuje zobrazovat výsledky po jednotlivých stránkách.

Následující příklad přeskakuje první dva zaměstnance a vrátí další dva:

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

Chcete-li vytvořit navigaci po stránkách, postupujte podle tohoto vzoru:

  1. Určete velikost stránky, například 2 dokumenty na stránku.
  2. Vynásobte velikost stránky číslem stránky mínus jedna, abyste získali hodnotu přeskočení.
  3. Tuto hodnotu předejte funkci skip() a velikost stránky funkci limit().

Například stránka 1 používá skip(0).limit(2), stránka 2 používá skip(2).limit(2) a stránka 3 používá skip(4).limit(2). Vždy přidejte také sort(), aby pořadí dokumentů zůstalo stabilní napříč stránkami. Upozorňujeme, že velmi velké hodnoty skip mohou být u velkých kolekcí pomalé, protože MongoDB stále prohledává a zahazuje přeskočené dokumenty; stránkování na základě rozsahu je ve velkém měřítku rychlejší.

Seřadit podle více polí v MongoDB

MongoDB lze seřadit podle více polí najednou. Pole v objektu řazení seřadíte podle priority a MongoDB seřadí podle prvního pole, poté použije další pole k oddělení vazeb a tak dále.

Následující příklad seřadí zaměstnance podle jména vzestupně a u zaměstnanců se stejným jménem sestupně podle ID zaměstnance:

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

Pořadí klíčů v objektu řazení je důležité: Pole EmployeeName se použije jako první, protože se objeví jako první. Toto řazení s více klíči je užitečné pro sestavy, kde seskupujete podle jednoho pole a poté v rámci každé skupiny řadíte. Pro dosažení nejlepšího výkonu u velkých kolekcí vytvořte složený index, který odpovídá polím a směrům použitým v řazení.

Nejčastější dotazy

Bez třídění(), MongoDB vrací dokumenty v přirozeném pořadí, které obvykle odráží jejich pořadí na disku a není zaručeno. Pro předvídatelné pořadí vždy přidejte explicitní sort() k poli, jako je _id.

Logicky, MongoDB Vždy použije sort() před limit(), bez ohledu na pořadí, v jakém je zřetězíte. To znamená, že limit() vrátí nejvýše položené dokumenty seřazeného výsledku, nikoli náhodnou podmnožinu, která je následně seřazena.

Řazení velkých sad výsledků bez indexu vynutí řazení v paměti, které selže, jakmile překročí limit paměti. Vytvoření indexu v poli řazení umožňuje... MongoDB efektivně vracet seřazené výsledky.

Umělá inteligence dokáže proměnit obyčejný požadavek jako „nejnovějších pět zaměstnanců“ na dotaz typu find().sort().limit() se správným směrem a počtem. Také vysvětluje každý modifikátor, aby se začátečníci mohli seznámit s daným postupem.

Ano. Umělá inteligence dokáže prozkoumat plán dotazů, detekovat řazení v paměti a doporučit index potřebný k podpoře řazení. To pomáhá vývojářům zrychlit řazení a omezit dotazy na velké kolekce.

Shrňte tento příspěvek takto: