2016-11-25 124 views
1

我有一個集合:MongoDB中如何獲得每個最大值「組具有相同鍵」

{'name':'ada','updateTime':'2016-11-25'} 
{'name':'bob','updateTime':'2016-11-25'} 
{'name':'ada','updateTime':'2016-11-20'} 
{'name':'bob','updateTime':'2016-11-20'} 
{'name':'ada','updateTime':'2016-11-15'} 
{'name':'bob','updateTime':'2016-11-15'} 
... 

,如果我想要的結果是,同樣的「名字」的「更新時間」的最大值:

{'name':'ada','updateTime':'2016-11-25'} 
{'name':'bob','updateTime':'2016-11-25'} 
... 

或finaly獲得Python字典:

{'ada':'2016-11-25','bob':'2016-11-25',...} 

如何做最有效?

我現在就做在python是:

for name in db.collection.distinct('name'): 
    result[name]=db.collection.find({'name':name}).sort('updateTime',-1)[0] 

是做 '找到' 過多少次?

回答

0

MongoDB中有與$最大運營商尋找最大價值的選擇。

db.collection.aggregate([ 
    { 
     $group:{ 
     "_id":"$name", 
     updateTime:{ 
      $max:"$updateTime" 
     } 
     } 
    } 
]) 

以上查詢在我的輸出下面。

{ 
    "_id" : "bob", 
    "updateTime" : "2016-11-25" 
} 
{ 
    "_id" : "ada", 
    "updateTime" : "2016-11-25" 
} 
2

你可以用聚集做在一個單一的查詢:

db.collection.aggregate([ 
    { 
     $sort:{ 
     updateTime:-1 
     } 
    }, 
    { 
     $group:{ 
     "_id":"$name", 
     updateTime:{ 
      $first:"$updateTime" 
     } 
     } 
    } 
]) 

這將返回

{ "_id" : "bob", "updateTime" : "2016-11-25" } 
{ "_id" : "ada", "updateTime" : "2016-11-25" } 
相關問題