Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB:按发生次数对不同的键进行排序_Mongodb_Pymongo - Fatal编程技术网

MongoDB:按发生次数对不同的键进行排序

MongoDB:按发生次数对不同的键进行排序,mongodb,pymongo,Mongodb,Pymongo,我从Github中删除了一堆存储库数据。每个存储库都有一个language键,通过pymongo,我可以用db.distinct('language')列出数据库中的所有语言。我想按照出现的次数对列表进行排序,这样第一种语言就是我的列表,这是与大多数存储库相关联的语言。是否可以在一个查询中执行此操作,而不是在数据库中查询每种语言的计数?一个可能的解决方案是简单的映射/减少。优点是,您可以使用它来聚合其他信息,例如提交数量、提交者、文件 不过,对于您想要的解决方案来说,这可能太难了。我对现代聚合框

我从Github中删除了一堆存储库数据。每个存储库都有一个
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}}
])