gpt4 book ai didi

聚合查询中的 Mongodb 限制数组

转载 作者:行者123 更新时间:2023-12-05 08:27:58 24 4
gpt4 key购买 nike

我正在尝试编写查询以返回每个类别中排名前 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 以减少 terms 数组,但没有成功。

这可以使用聚合框架来实现吗,还是我应该考虑另一种方法?

最佳答案

从 MongoDb 版本 3.1.6 开始,您现在可以在 $project 阶段切片:

{
$project: {
terms: {
$slice: ["$terms", 0, 10]
}
}
}

如果您想将 $pushed 的项目数限制为 10。

问题来了: https://jira.mongodb.org/browse/SERVER-6074

关于聚合查询中的 Mongodb 限制数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25711657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com