MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

3 начина за сортиране на документи в MongoDB

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 за повече информация.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Кога трябва да използвам NoSQL база данни вместо релационна база данни? Добре ли е да използвате и двете на един и същи сайт?

  2. Намиране на записи на mongoDB в партиди (с помощта на mongoid ruby ​​адаптер)

  3. mongo.so:> недефиниран символ:php_json_encode в Unknown на ред 0. След инсталиране mongo драйвер за php

  4. MongoDB различен()

  5. Как да конфигурирате името на колекцията MongoDb за клас в Spring Data