2015-06-25 45 views
1

我按mvid對結果進行了分組,結果爲每組中出現次數。組結果中的最大MongoDB數量

db.some_details.aggregate([ 
{$group: {_id: "$mvid", count: {$sum: 1}}} 
]) 

現在,我想選擇具有最大數量的組。這是我的天真猜測:

db.some_details.aggregate([ 
{$group: {_id: "$mvid", count: {$sum: 1}}}, 
{$max: "count"} 
]) 

很明顯,它會產生一個錯誤。我需要在組中使用max,但是我沒有任何東西可以組合。

回答

3

什麼也將工作的排序結果,然後只用第一個元素:

db.some_details.aggregate([ 
{$group: {_id: "$mvid", count: {$sum: 1}}}, 
{$sort: {"count": -1}}, 
{$limit: 1 } 
]) 

,我看到的相比,chridam的解決方案的好處是,你也可以得到與最大計數組的ID,但我希望它慢(未測試)。

2

聚集管道讓你可以包括另一個$group運營商的管道,會給你所有組的最大計數:

db.some_details.aggregate([ 
    { 
     $group: { 
      _id: "$mvid", 
      count: { $sum: 1 } 
     } 
    }, 
    { 
     $group: { 
      _id: 0, 
      maxCount: { $max: "$count" } 
     } 
    } 
]) 
+0

這是一個很好的解決方案,但它不會返回最大數量的「mvid」。 – user1700890