我正在尝试在MongoDB中实现嵌套分组查询,但是我卡在了尝试添加外部分组的地方。给定以下(简化的)数据文档:
{
"timestamp" : ISODate(),
"category" : "movies",
"term" : "my movie"
}
我正在尝试获取所有类别的列表,并且在类别内应该有顶部数量的术语。我希望我的输出类似于这样:
[
{ category: "movies",
terms: [ { term: "movie 1", total: 5000 }, { term: "movie 2", total: 200 } ... ]
},
{ category: "sports",
terms: [ { term: "football 1", total: 4000 }, { term: "tennis 2", total: 250 } ... ]
},
]
我的“内部组”如下所示,并将为所有类别获取前5名:
db.collection.aggregate([
{ $match : { "timestamp": { $gt: ISODate("2014-08-27") } } },
{ $group : { _id : "$term", total : { $sum : 1 } } },
{ $sort : { total : -1 } },
{ $limit: 5 }
]);
// Outputs:
{ "_id" : "movie 1", "total" : 943 }
{ "_id" : "movie 2", "total" : 752 }
如何实现“外部分组”?
另外,有时上述聚合返回空值(并非所有文档都具有术语值)。如何忽略空值?
提前致谢。
{ $sort : { total : -1 } }
以确保最多的分组术语在顶部,但我无法弄清如何限制每个类别的术语为5个。在分组之间添加{ $limit: 6 }
不起作用。(我正在尝试执行每个类别的前5个术语查询)。谢谢! - clangers