Mongodb groupby 字段并显示其他字段出现次数
Mongodb groupby field and show other field occurrences count
我正在为这个查询苦苦挣扎,但运气不好。
我的 mongodb
中有以下项目 collection
[
{ name: 'xxxx' , channel: 'A' },
{ name: 'yyyy' , channel: 'C' },
{ name: 'xxxx' , channel: 'C' },
{ name: 'xxxx' , channel: 'A' },
{ name: 'yyyy' , channel: 'A' },
{ name: 'yyyy' , channel: 'C' },
{ name: 'xxxx' , channel: 'A' },
{ name: 'xxxx' , channel: 'B' },
{ name: 'xxxx' , channel: 'C' },
];
我想按名称和计数对我的项目进行分组,并显示每个项目名称及其计数的最受欢迎频道。
所以聚合结果应该是这样的
[
{ name: 'xxxx', count: 6 , top_channel: 'A', top_channel_count: 3},
{ name: 'yyyy', count: 3 , top_channel: 'C', top_channel_count: 2},
]
那么,我的聚合查询应该是什么样的。
您必须使用 $group twice: after first pipeline you'll count all values inside (channel, name)
pair (using $sum
). Then you can use $sort 重新排序您的元素,以便在下一组中您将使用 $first
运算符获得顶部频道:
db.col.aggregate([
{
$group: {
_id: { name: "$name", channel: "$channel" },
count: { $sum: 1 }
}
},
{
$sort: { count: -1 }
},
{
$group: {
_id: "$_id.name",
count: { $sum: "$count" },
top_channel: { $first: "$_id.channel" },
top_channel_count: { $first: "$count" }
}
},
{
$sort: { count: -1 }
}
])
我正在为这个查询苦苦挣扎,但运气不好。
我的 mongodb
中有以下项目 collection[
{ name: 'xxxx' , channel: 'A' },
{ name: 'yyyy' , channel: 'C' },
{ name: 'xxxx' , channel: 'C' },
{ name: 'xxxx' , channel: 'A' },
{ name: 'yyyy' , channel: 'A' },
{ name: 'yyyy' , channel: 'C' },
{ name: 'xxxx' , channel: 'A' },
{ name: 'xxxx' , channel: 'B' },
{ name: 'xxxx' , channel: 'C' },
];
我想按名称和计数对我的项目进行分组,并显示每个项目名称及其计数的最受欢迎频道。
所以聚合结果应该是这样的
[
{ name: 'xxxx', count: 6 , top_channel: 'A', top_channel_count: 3},
{ name: 'yyyy', count: 3 , top_channel: 'C', top_channel_count: 2},
]
那么,我的聚合查询应该是什么样的。
您必须使用 $group twice: after first pipeline you'll count all values inside (channel, name)
pair (using $sum
). Then you can use $sort 重新排序您的元素,以便在下一组中您将使用 $first
运算符获得顶部频道:
db.col.aggregate([
{
$group: {
_id: { name: "$name", channel: "$channel" },
count: { $sum: 1 }
}
},
{
$sort: { count: -1 }
},
{
$group: {
_id: "$_id.name",
count: { $sum: "$count" },
top_channel: { $first: "$_id.channel" },
top_channel_count: { $first: "$count" }
}
},
{
$sort: { count: -1 }
}
])