2015-06-25 46 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