我有一堆从 Github 报废的存储库数据。每个存储库都有一个language
密钥,使用 pymongo 我可以列出我的数据库中的所有语言db.distinct('language')
。我想按出现次数对列表进行排序,以便第一种语言是我的列表是与最多存储库关联的语言。是否可以在一个查询中执行此操作,而不是在数据库中查询每种语言的计数?
问问题
257 次
2 回答
3
感谢 Nicolas Rinaudo 和 JohnnyHK,我能够找到这个解决方案。这个想法是根据语言对每个存储库进行分组并汇总文档数量。然后可以按新键对组进行排序。
db_languages = db.aggregate([
{"$group": {
"_id": {
"language": "$language",
},
"num_repos": {
"$sum": 1,
}
}},
{"$sort": {"num_repos": -1}}
])
于 2013-08-29T17:32:09.447 回答
1
一种可能的解决方案是简单的 map/reduce。优点是您可以使用它来聚合其他信息,例如提交数量、提交者、文件......
但是,对于您想要的解决方案来说,它可能太重了。我对现代聚合框架并不完全熟悉,但我相信如果有除 map/reduce 之外的解决方案,那你很可能会找到它。
于 2013-08-29T12:29:31.033 回答