V MongoDB můžete třídit výsledky dotazu pomocí limit()
metoda.
Když v MongoDB zadáte dotaz na kolekci pomocí db.collection.find()
můžete přidat sort()
způsob, jak určit, jak mají být výsledky seřazeny. sort()
metoda určuje pořadí řazení pro kurzor.
Při použití sort()
musíte jako parametr zadat pořadí řazení. Musí se jednat o dokument JSON, který definuje pořadí řazení. Obvykle bude obsahovat jedno nebo více polí, za každým následuje buď 1
nebo -1
, v závislosti na tom, zda má být řazení ve vzestupném nebo sestupném pořadí.
Příklad
Nejprve proveďte dotaz bez pomocí sort()
(abychom viděli přirozené pořadí řazení):
Bez sort()
db.musicians.find( )
Výsledek:
{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }
Pomocí sort()
ve vzestupném pořadí
Hodnota 1
vedle názvu pole určuje, že dokumenty mají být seřazeny podle zadaného pole vzestupně.
Zde seřadíme výsledky podle názvu ve vzestupném pořadí:
db.musicians.find( ).sort( { name: 1 } )
Výsledek:
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }
Pomocí sort()
v sestupném pořadí
Hodnota -1
vedle názvu pole určuje sestupné pořadí.
Zde seřadíme výsledky podle názvu v sestupném pořadí:
db.musicians.find( ).sort( { name: -1 } )
Výsledek:
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
Více polí
Můžete třídit podle více polí. Stačí oddělit každé pole čárkou. Když to uděláte, dokumenty se seřadí podle prvního zadaného pole, pak podle dalšího a tak dále.
Zde třídíme podle nástroje pole, za nímž následuje born pole. Pokud dva nebo více hudebníků hraje na stejný nástroj, born pole určuje, jak oni jsou seřazeny vůči sobě navzájem.
db.musicians.find( ).sort( { instrument: 1, born: 1 } )
Výsledek:
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
A abyste viděli, jak může druhé pole ovlivnit pořadí, přepněte jej na zápornou hodnotu (sestupně):
db.musicians.find( ).sort( { instrument: 1, born: -1 } )
Výsledek:
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
Řadit s limitem
Můžete použít sort()
s limit()
seřadit výsledky omezené sady výsledků.
Zde omezíme výsledky na 3 dokumenty:
db.musicians.find( ).limit(3).sort( { name: 1, born: -1 } )
Výsledek:
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
Pokud přepneme název sestupně:
db.musicians.find( ).limit(3).sort( { name: -1, born: -1 } )
Výsledek:
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
Všimněte si, že v tomto případě nar nemá žádný účinek, protože pro dané jméno není nikdy více než jeden výsledek.
Porovnání různých typů
Při porovnávání hodnot různých typů BSON používá MongoDB následující pořadí porovnání, od nejnižší po nejvyšší:
- MinKey (interní typ)
- Nulé
- Čísla (ints, longs, double)
- Symbol, řetězec
- Objekt
- Pole
- BinData
- ObjectId
- Booleovská hodnota
- Datum
- Časové razítko
- Regulární výraz
- MaxKey (interní typ)
Všimněte si, že s neexistujícími poli se zachází stejně jako s hodnotou null (nebo prázdným objektem BSON).