很抱歉,如果这个问题令人困惑,我不完全确定该如何措辞。希望从示例中可以明显看出我正在尝试做的事情。
我有一个应用,其中包含有关音乐曲目的一些数据。用户上传曲目,人们对此进行投票。这是我的曲目集合的一部分:
np.nan
我要做的是在整个收藏集中找到最具投票力的艺术家。
理想情况下,该过程类似于:
在上面的示例集合中,我会得到类似的东西:
{
"_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,
}
但是我不确定从哪里拿走它,即使我朝着正确的方向前进。有什么想法吗?
谢谢!
答案 0 :(得分:0)
解决了这个问题,最后很容易。
按艺术家分组,然后汇总票数:
db.tracks.aggregate([
{ '$group': { '_id': "$artist", 'total': { '$sum': '$upvotes' } } },
{ '$sort': { 'total': -1 } }
])