cla*_*ers 3 mongodb mongodb-query aggregation-framework
我正在尝试编写一个查询来返回每个类别中的前 X 个术语 - 例如前 5 个、前 10 个术语等。每个术语都有一个关联的类别,并且基于另一个stackoverflow 问题的一些帮助,我设法得到了这个:
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"
}
}
}
}
]);
Run Code Online (Sandbox Code Playgroud)
上面的查询确实有效,并返回如下所示的数据:
[
{ 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 } ... ]
},
]
Run Code Online (Sandbox Code Playgroud)
不过,我试图将术语数组限制为固定数字,即 5 或 10 - 这将对应于每个类别的 X 搜索次数。我一直在尝试各种选项,例如$slice在 中添加$push以减少术语数组,但没有成功。
可以使用聚合框架来实现这一点,还是我应该考虑另一种方法?
小智 8
从 MongoDb 版本 3.1.6 开始,您现在可以在 $project 阶段进行切片:
{
$project: {
terms: {
$slice: ["$terms", 0, 10]
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想将 $push 的项目数量限制为 10。
这是问题: https://jira.mongodb.org/browse/SERVER-6074
| 归档时间: |
|
| 查看次数: |
8583 次 |
| 最近记录: |