MongoDB предоставя няколко начина за сортиране на документи в определен ред. Всеки от тях ни позволява да подреждаме документите във възходящ или низходящ ред.
Има и опция за подреждане на резултатите от $text
търсене – сортиране по изчисления textScore
метаданни в низходящ ред.
Ето 3 начина за сортиране на документи в MongoDB.
cursor.sort()
Метод
cursor.sort()
метод определя реда, в който заявката връща съвпадащи документи.
Да предположим, че имаме колекция, наречена employees
със следните документи:
{ "_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 }
Ето пример за връщане на тези документи, сортирани по тяхната salary
поле във възходящ ред, както и техния _id
поле:
db.employees.find().sort( { salary: 1, _id: 1 } )
Резултат:
{ "_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 }
Тук използвахме 1
за възходящ ред. Ако искаме да е в низходящ ред, просто бихме използвали -1
вместо това.
Причината да включих _id
полето в поръчката е защото, ако двама или повече служители имат една и съща заплата, тогава _id
полето може да се използва за сортиране на тези документи помежду си.
Въпреки че това може да изглежда тривиално, това ще попречи на MongoDB да връща тези документи в различен ред всеки път, когато стартираме заявката.
Можете също да сортирате резултатите от $text
Търсене. Вижте MongoDB sort()
за пример.
$sort
Етап на тръбопровод за агрегация
Когато използвате рамката на конвейера за агрегиране, можете да използвате $sort
етап за сортиране на всички входни документи и ги връща в конвейера в сортиран ред.
Ето как можем да използваме $sort
за да върне същия резултат като предишния пример. Освен това нека ги сортираме в низходящ поръчайте този път:
db.employees.aggregate(
[
{ $sort : { salary : -1, _id: 1 } }
]
)
Резултат:
{ "_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 }
Можете също да сортирате резултатите от $text
Търсене. Вижте MongoDB $sort
за пример.
$orderBy
Модификатор на заявка
$orderBy
модификаторът на заявка може да се използва в една от двете форми.
Като това:
db.employees.find( { $query: {}, $orderBy: { salary: 1 } } )
Или така::
db.employees.find()._addSpecial( "$orderby", { salary : 1 } )
$orderBy
модификаторът на заявка е отхвърлен в mongo
shell от v3.2, но все пак реших да го включа тук. Вижте документацията на MongoDB за повече информация.