我正在尝试编写一个查询,以返回每个类别中的前X个术语 - 例如前5个、前10个等等。每个术语都有一个相关的类别,并且在得到另一个stackoverflow问题的帮助后,我已经成功地做到了这一点。
上述查询可行,并返回类似以下数据的结果:
然而,我正在尝试将术语数组限制为固定数量,例如5或10-这将对应于每个类别的X次搜索。我一直在尝试各种选项,比如在$push中添加$slice来缩小术语数组,但没有成功。
使用聚合框架可以实现这个目标吗?还是我应该考虑其他方法?
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来缩小术语数组,但没有成功。
使用聚合框架可以实现这个目标吗?还是我应该考虑其他方法?