MongoDB:按出现次数对不同的键进行排序

时间:2013-08-29 12:23:25

标签: mongodb pymongo

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

2 个答案:

答案 0 :(得分:3)

感谢Nicolas Rinaudo和JohnnyHK,我能够找到这个解决方案。我们的想法是根据语言对每个存储库进行分组,并总结文档的数量。然后可以按新密钥对组进行排序。

db_languages = db.aggregate([
     {"$group": {
         "_id": {
             "language": "$language",
         },
         "num_repos": {
             "$sum": 1,
         }
     }},
     {"$sort": {"num_repos": -1}}
])

答案 1 :(得分:1)

一种可能的解决方案是简单的map / reduce。优点是您可以使用它来聚合其他信息,例如提交,提交者,文件的数量......

但是,对于你想要的东西来说,这可能是一个太沉重的解决方案。我并不完全熟悉现代聚合框架,但我相信如果有一个解决方案而不是map / reduce,那么你可能会找到它。