Извиняюсь, если вопрос сбивает с толку, я не совсем уверен, как сформулировать вопрос.То, что я пытаюсь сделать, должно быть ясно из примера.
У меня есть приложение, содержащее некоторые данные о музыкальных треках.Пользователи загружают трек, и люди голосуют за него.Вот часть моей коллекции треков:
{
"_id": {
"$oid": "5c98e400c0b156250eeda15c"
},
"track_title": "I Heard It Through The Grapevine",
"description": "A nice track description",
"date_added": "25 March 2019 14:52",
"artist": "Marvin Gaye",
"genre": "Soul",
"upvotes": 10,
"youtube_link": "https://www.youtube.com/watch?v=hajBdDM2qdg",
"year": 1968,
"user_name": "Christine"
}
{
"_id": {
"$oid": "5c990754c0b1563bbbc577a2"
},
"track_title": "Snow",
"description": "Foo bar spam eggs",
"date_added": "25 March 2019 16:36",
"artist": "Red Hot Chili Peppers",
"genre": "Alternative Rock",
"upvotes": 6,
"youtube_link": "https://www.youtube.com/watch?v=ifXalt3MJtM",
"year": 2006,
"date_added_raw": {
"$date": "2019-03-25T16:36:52.988Z"
},
"user_name": "Frazer"
}
{
"_id": {
"$oid": "5c938e11c0b15662ec3c79de"
},
"track_title": "Californication",
"description": "I am foo, bar are you?",
"date_added": "21 March 2019 13:53",
"artist": "Red Hot Chili Peppers",
"genre": "Alt Rock",
"upvotes": 10,
"youtube_link": "https://www.youtube.com/watch?v=YlUKcNNmywk",
"year": 2000,
"user_name": "Ewan M"
}
Я пытаюсь найти исполнителя с наибольшим количеством голосов в коллекции.
В идеалепроцесс будет выглядеть примерно так:
- Получить общее количество голосов за каждого исполнителя
- Сортировать по возрастанию голосов по убыванию
В случае коллекции примероввыше, я получил бы что-то вроде:
{
"artist": "Red Hot Chili Peppers",
"total_upvotes": 16,
}
{
"artist": "Marvin Gaye",
"total_upvotes": 10,
}
Затем я мог бы работать с полученной коллекцией, получая не только самого популярного художника, но, возможно, второго и третьего самых популярных.
Пока что я могу суммировать все положительные отзывы по всей коллекции (то есть общее количество голосов, поданных по всем трекам)
# Get the total number of upvotes cast on the app
# First, get a list of all the upvote values
all_upvotes_list = list(tracks_collection.find( { },
{ 'upvotes': 1, '_id' :0 }
))
# Iterate through the list and sum the values
all_upvotes = sum(item['upvotes'] for item in all_upvotes_list)
Но я не совсем уверен, где его взять, или даже еслиЯ иду в правильном направлении.Есть идеи?
Спасибо!