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.