【发布时间】:2014-09-07 15:08:06
【问题描述】:
我正在尝试编写一个查询来返回每个类别的前 X 个术语 - 例如前 5 名,前 10 名等。每个术语都有一个相关的类别,并且基于另一个 stackoverflow question 的一些帮助,我设法得到了这个:
db.collection.aggregate([
{
$group : {
_id : {
category: "$uri.category",
term: "$uri.term",
},
total: { $sum : 1 }
}
},
{ $sort : { total : -1 } },
{
$group : {
_id : "$_id.category",
terms: {
$push: {
term: "$_id.term",
total: "$total"
}
}
}
}
]);
上述查询确实有效,并返回如下所示的数据:
[
{ 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 或 10 - 这将对应于每个类别的 X 搜索次数。我一直在尝试各种选项,例如在$push 中添加$slice 以减少术语数组,但没有成功。
这可以使用聚合框架来实现吗,还是我应该看看另一种方法?
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework