MongoDB udostępnia kilka sposobów sortowania dokumentów w określonej kolejności. Każdy z nich pozwala nam uporządkować dokumenty w kolejności rosnącej lub malejącej.
Istnieje również możliwość zamówienia wyników $text search – sortowanie według obliczonego textScore metadane w porządku malejącym.
Oto 3 sposoby sortowania dokumentów w MongoDB.
cursor.sort() Metoda
cursor.sort() Metoda określa kolejność, w jakiej zapytanie zwraca pasujące dokumenty.
Załóżmy, że mamy kolekcję o nazwie employees z następującymi dokumentami:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }
{ "_id" : 9, "name" : "Xena", "salary" : 382000 }
Oto przykład zwracania tych dokumentów posortowanych według ich salary pole w kolejności rosnącej, a także ich _id pole:
db.employees.find().sort( { salary: 1, _id: 1 } ) Wynik:
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 }
{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }
{ "_id" : 9, "name" : "Xena", "salary" : 382000 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
Tutaj użyliśmy 1 dla porządku rosnącego. Gdybyśmy chcieli go w porządku malejącym, po prostu użylibyśmy -1 zamiast tego.
Powód, dla którego dołączyłem _id pole w zamówieniu jest spowodowane tym, że jeśli dwóch lub więcej pracowników ma taką samą pensję, to _id pole może być użyte do sortowania tych dokumentów między sobą.
Choć może się to wydawać trywialne, uniemożliwi to MongoDB zwrócenie tych dokumentów w innej kolejności przy każdym uruchomieniu zapytania.
Możesz także sortować wyniki $text Szukaj. Zobacz MongoDB sort() na przykład.
$sort Etap potoku agregacji
Korzystając ze struktury potoku agregacji, możesz użyć $sort etap, aby posortować wszystkie dokumenty wejściowe i zwrócić je do potoku w posortowanej kolejności.
Oto jak możemy użyć $sort aby zwrócić ten sam wynik, co w poprzednim przykładzie. Poza tym posortujmy je malejąco zamów tym razem:
db.employees.aggregate(
[
{ $sort : { salary : -1, _id: 1 } }
]
) Wynik:
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 9, "name" : "Xena", "salary" : 382000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }
{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
Możesz także sortować wyniki $text Szukaj. Zobacz MongoDB $sort na przykład.
$orderBy Modyfikator zapytania
$orderBy modyfikator zapytania może być używany w jednej z dwóch form.
Tak:
db.employees.find( { $query: {}, $orderBy: { salary: 1 } } ) Lub tak::
db.employees.find()._addSpecial( "$orderby", { salary : 1 } )
$orderBy modyfikator zapytania został przestarzały w mongo powłoki od wersji 3.2, ale zdecydowałem się ją tutaj umieścić. Więcej informacji znajdziesz w dokumentacji MongoDB.