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.

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
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
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:
- Určete velikost stránky, například 2 dokumenty na stránku.
- Vynásobte velikost stránky číslem stránky mínus jedna, abyste získali hodnotu přeskočení.
- 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í.


