MongoDB:按发生次数对不同的键进行排序
我从Github中删除了一堆存储库数据。每个存储库都有一个MongoDB:按发生次数对不同的键进行排序,mongodb,pymongo,Mongodb,Pymongo,我从Github中删除了一堆存储库数据。每个存储库都有一个language键,通过pymongo,我可以用db.distinct('language')列出数据库中的所有语言。我想按照出现的次数对列表进行排序,这样第一种语言就是我的列表,这是与大多数存储库相关联的语言。是否可以在一个查询中执行此操作,而不是在数据库中查询每种语言的计数?一个可能的解决方案是简单的映射/减少。优点是,您可以使用它来聚合其他信息,例如提交数量、提交者、文件 不过,对于您想要的解决方案来说,这可能太难了。我对现代聚合框
language
键,通过pymongo,我可以用db.distinct('language')
列出数据库中的所有语言。我想按照出现的次数对列表进行排序,这样第一种语言就是我的列表,这是与大多数存储库相关联的语言。是否可以在一个查询中执行此操作,而不是在数据库中查询每种语言的计数?一个可能的解决方案是简单的映射/减少。优点是,您可以使用它来聚合其他信息,例如提交数量、提交者、文件
不过,对于您想要的解决方案来说,这可能太难了。我对现代聚合框架并不完全熟悉,但我相信,如果有一种解决方案不是map/reduce,那么您很可能会在这里找到它。一种可能的解决方案是简单的map/reduce。优点是,您可以使用它来聚合其他信息,例如提交数量、提交者、文件
不过,对于您想要的解决方案来说,这可能太难了。我并不完全熟悉现代聚合框架,但我相信,如果有一种解决方案不是map/reduce,那么您很可能会在这里找到它。多亏了Nicolas Rinaudo和JohnnyHK,我才能够找到这个解决方案。其思想是根据语言对每个存储库进行分组,并将文档数量相加。然后可以按新键对组进行排序
db_languages = db.aggregate([
{"$group": {
"_id": {
"language": "$language",
},
"num_repos": {
"$sum": 1,
}
}},
{"$sort": {"num_repos": -1}}
])
多亏了尼古拉斯·里纳多和约翰尼·霍克,我才想出了这个解决方案。其思想是根据语言对每个存储库进行分组,并将文档数量相加。然后可以按新键对组进行排序
db_languages = db.aggregate([
{"$group": {
"_id": {
"language": "$language",
},
"num_repos": {
"$sum": 1,
}
}},
{"$sort": {"num_repos": -1}}
])
见