Сортировка коллекции MongoDB по одному ключу с разными значениями - PullRequest
2 голосов
/ 11 марта 2019

Я пытаюсь сделать запрос в моей базе данных Mongo, чтобы отобразить все значения из определенной коллекции, отсортированные по всем значениям определенного ключа. Например, у меня есть коллекция:

{
  "id":"1235432",
  "name":"John Smith",
  "occupation":"janitor",
  "salary":"30000"
},
{
  "id":"23412312",
  "name":"Mathew Colins",
  "occupation":"janitor"
  "salary":"32000"
},
{
  "id":"7353452",
  "name":"Depp Jefferson",
  "occupation":"janitor"
  "salary":"33000"
},
{
  "id":"342434212",
  "name":"Clara Smith",
  "occupation":"Accountant",
  "salary":"45000"
},
{
  "id":"794563452",
  "name":"Jonathan Drako",
  "occupation":"Accountant",
  "salary":"46000"
},
{
  "id":"8383747",
  "name":"Simon Well",
  "occupation":"Accountant",
  "salary":"41000"
}

, и я пытаюсь отобразить только TOP 2 с самой высокой зарплатой по роду занятий. Мой запрос выглядит примерно так:

Stats.find({occupation:{$exists:true}}).populate('name').sort({salary:1}).limit(2)

тем самым возвращает только 1 результат вместо одного из каждого занятия.

Как я могу изменить свой запрос, чтобы отображать топ-2 каждого занятия по диапазону зарплаты?

1 Ответ

2 голосов
/ 11 марта 2019

Вы можете использовать $aggregate, как указано ниже.

 db.collectionName.aggregate({$match:{occupation:{$exists:true}}},
    { $sort: {"salary":-1}},
    { $limit: 2},
   { $project: {"name":1,"salary":1,_id:0} })

Выходной JSON:

{"name" : "Jonathan Drako",
"salary" : "46000"},
{"name" : "Clara Smith",
"salary" : "45000"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...