2017-10-11 47 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" 
     } 
    } 
]);