我根据mvid
和每组中计数的出现次数对结果进行分组。
db.some_details.aggregate([
{$group: {_id: "$mvid", count: {$sum: 1}}}
])
现在,我想选择具有最大计数的组。这是我天真的猜测:
db.some_details.aggregate([
{$group: {_id: "$mvid", count: {$sum: 1}}},
{$max: "count"}
])
很明显,它会产生一个错误。我需要在group中使用max,但我没有任何要分组的内容。
也可以对结果进行排序,然后只使用第一个元素:
db.some_details.aggregate([
{$group: {_id: "$mvid", count: {$sum: 1}}},
{$sort: {"count": -1}},
{$limit: 1 }
])
与Chrdam的解决方案相比,我看到的优势是,您还可以获得具有最大计数的组的id,但我预计它会更慢(未测试)。
聚合管道允许您包括另一个$group
操作员管道,该管道将为您提供所有组的最大计数:
db.some_details.aggregate([
{
$group: {
_id: "$mvid",
count: { $sum: 1 }
}
},
{
$group: {
_id: 0,
maxCount: { $max: "$count" }
}
}
])