我有一堆我从Github中删除的存储库数据。每个存储库都有一个language
密钥和pymongo,我可以使用db.distinct('language')
列出数据库中的所有语言。我想按出现次数对列表进行排序,以便第一种语言是我的列表是与大多数存储库关联的语言。是否可以在一个查询中执行此操作,而不是查询数据库中每种语言的计数?
答案 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,那么你可能会找到它。