Как найти самые популярные идентификаторы, отсортированные по количеству строк в MongoDB? - PullRequest
0 голосов
/ 29 мая 2020

У меня есть приложение для опроса, в котором, когда пользователь голосует, такие записи создаются в коллекции votes:

{"vote": "apples", "voter_id": 54729, "poll_id": 1}
{"vote": "oranges", "voter_id": 48201, "poll_id": 1}
{"vote": "apples", "voter_id": 22810, "poll_id": 1}
{"vote": "oranges", "voter_id": 55901, "poll_id": 1}
{"vote": "oranges", "voter_id": 54321, "poll_id": 1}

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

{"vote": "oranges", "count": 3}
{"vote": "apples", "count": 2}

Какой запрос мне следует использовать для этого?

1 Ответ

2 голосов
/ 29 мая 2020

Вы можете использовать конвейер агрегации:

db.collection.aggregate([{$match:{poll_id:1}},{$group:{_id: { vote: "$vote" },count:{$sum:1}}},{$project:{vote:"$_id.vote",count:1,_id:0}},{$sort:{count:-1}}])

Вывод:

{ "count" : 2, "vote" : "apples" }
{ "count" : 3, "vote" : "oranges" }

И вы можете отсортировать по количеству, а затем вернуть верхний K:

db.collection.aggregate([{$match:{poll_id:1}},{$group:{_id: { vote: "$vote" },count:{$sum:1}}},{$project:{vote:"$_id.vote",count:1,_id:0}},{$sort:{count:-1}},{$limit:1}])

Вывод:

{ "count" : 3, "vote" : "oranges" }

Попробуйте: https://mongoplayground.net/p/Mp_c7SAxmYY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...