2017-10-11 94 views
0

使用下面提供MongoDB中的样本数据,查找收集pymongo

data = [{'name':'a','value':2}, 
     {'name':'a','value':3}, 
     {'name':'b','value':1}, 
     {'name':'b','value':3}, 
     {'name':'c','value':2}] 

我已经知道如何找到一个名为“一个”匹配:

db.lol.find_one({'name': 'a']},sort=[("value", pymongo.DESCENDING)]) 

我怎样才能使用pymongo获取每个具有最高值的名称的所有数据,如下所示:

data = [{'name':'a','value':3}, 
     {'name':'b','value':3}, 
     {'name':'c','value':2}] 

回答

0
db.lol.find_one({},sort=[("value", pymongo.DESCENDING)]) 
0

您可以使用简单的$group$max聚集在这里:

db.lol.aggregate([ 
    { 
     $group : { 
      _id : { name : '$name' }, 
      value : { $max : '$value' } 
     } 
    }, 
    { 
     $project : { 
      _id : 0, 
      value : 1, 
      name : "$_id.name" 
     } 
    } 
]);