W MongoDB możesz sortować wyniki zapytania za pomocą limit()
metoda.
W MongoDB, gdy wysyłasz zapytanie do kolekcji za pomocą db.collection.find()
metody, możesz dołączyć sort()
metodę, aby określić sposób sortowania wyników. sort()
metoda określa porządek sortowania kursora.
Używając sort()
metody, należy podać porządek sortowania jako parametr. Musi to być dokument JSON, który definiuje porządek sortowania. Zwykle zawiera jedno lub więcej pól, po każdym z nich następuje 1
lub -1
, w zależności od tego, czy sortowanie powinno być w porządku rosnącym czy malejącym.
Przykład
Najpierw zróbmy zapytanie bez za pomocą sort()
(dzięki czemu możemy zobaczyć naturalny porządek sortowania):
Bez sort()
db.musicians.find( )
Wynik:
{ "_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 }
Z sort()
w porządku rosnącym
Wartość 1
obok nazwy pola określa, że dokumenty powinny być sortowane według określonego pola w kolejności rosnącej.
Tutaj sortujemy wyniki według nazwy w kolejności rosnącej:
db.musicians.find( ).sort( { name: 1 } )
Wynik:
{ "_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 }
Z sort()
w kolejności malejącej
Wartość -1
obok nazwy pola określa kolejność malejącą.
Tutaj sortujemy wyniki według nazwy w kolejności malejącej:
db.musicians.find( ).sort( { name: -1 } )
Wynik:
{ "_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 }
Wiele pól
Możesz sortować według wielu pól. Po prostu oddziel każde pole przecinkiem. Gdy to zrobisz, dokumenty zostaną posortowane według pierwszego określonego pola, następnie następnego i tak dalej.
Tutaj sortujemy według instrumentu pole, po którym następuje urodzony pole. Jeśli dwóch lub więcej muzyków gra na tym samym instrumencie, urodzony pole określa, w jaki sposób oni są posortowane względem siebie.
db.musicians.find( ).sort( { instrument: 1, born: 1 } )
Wynik:
{ "_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 }
Aby zobaczyć, jak drugie pole może wpłynąć na kolejność, przełącz je na wartość ujemną (malejąco):
db.musicians.find( ).sort( { instrument: 1, born: -1 } )
Wynik:
{ "_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" }
Sortuj z limitem
Możesz użyć sort()
z limit()
aby posortować wyniki ograniczonego zestawu wyników.
Tutaj ograniczamy wyniki do 3 dokumentów:
db.musicians.find( ).limit(3).sort( { name: 1, born: -1 } )
Wynik:
{ "_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 }
Jeśli zmienimy nazwę w porządku malejącym:
db.musicians.find( ).limit(3).sort( { name: -1, born: -1 } )
Wynik:
{ "_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 }
Zwróć uwagę, że w tym przypadku urodzony nie ma żadnego efektu, ponieważ dla danej nazwy nigdy nie można uzyskać więcej niż jednego wyniku.
Porównywanie różnych typów
Porównując wartości różnych typów BSON, MongoDB stosuje następującą kolejność porównania, od najniższej do najwyższej:
- MinKey (typ wewnętrzny)
- Numer
- Liczby (ints, longs, doubles)
- Symbol, ciąg
- Obiekt
- Tablica
- BinData
- Identyfikator obiektu
- Boole'a
- Data
- sygnatura czasowa
- Wyrażenie regularne
- MaxKey (typ wewnętrzny)
Pamiętaj, że nieistniejące pola są traktowane tak samo jak wartość null (lub pusty obiekt BSON).