我在这个查询上苦苦挣扎。
我的mongodb中具有以下项目集合
[
{ 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},
]
所以,我的聚合查询应该是什么样子。
答案 0 :(得分:0)
您必须使用$group两次:在第一个管道之后,您将计算(channel, name)
对内的所有值(使用$sum
)。然后,您可以使用$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 }
}
])