2017-10-11 12 views
0

des échantillons de données dans MongoDB ci-dessous,Recherche collection de valeur la plus élevée pour pymongo

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

Je sais déjà comment trouver celui qui correspond au nom « a »:

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

Comment puis-je obtenir toutes les données pour chaque nom avec la plus haute valeur, quelque chose comme ça, en utilisant pymongo:

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

Répondre

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

Vous pouvez utiliser de simples $group avec $max agrégation ici:

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