2

我有一堆从 Github 报废的存储库数据。每个存储库都有一个language密钥,使用 pymongo 我可以列出我的数据库中的所有语言db.distinct('language')。我想按出现次数对列表进行排序,以便第一种语言是我的列表是与最多存储库关联的语言。是否可以在一个查询中执行此操作,而不是在数据库中查询每种语言的计数?

4

2 回答 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 回答