gpt4 book ai didi

mongodb - 如何使用匹配、排序和限制对 MongoDB 聚合进行排序

转载 作者:可可西里 更新时间:2023-11-01 09:12:30 24 4
gpt4 key购买 nike

我当前的聚合是:

db.group_members.aggregate({
$match: { user_id: { $in: [1,2,3] } }
}, {
$group: { _id: "$group_id" }
}, {
$sort: { last_post_at: -1 }
}, {
$limit: 5
})

对于文档结构:

{
_id: '...',
user_id: '...',
group_id: '...',
last_post_at: Date,
}

我还有一个关于 {user_id: 1, last_post_at: -1} 的索引

因为我的索引已经在 last_post_at 上了,所以排序没用吗?我不是 100% 确定它的顺序。

我的最终目标是复制这个 SQL:

SELECT DISTINCT ON (group_id)
FROM group_members
WHERE user_id in [1,2,3]
ORDER_BY last_post_at DESC
LIMIT 5

我想知道如何让它对非常大的 group_members 表现出色,并且仍然以正确的顺序返回它。

更新:我希望找到一种解决方案来限制加载到内存中的文档数量。这将是一个相当大的集合并且访问非常频繁。

最佳答案

将$sort放在$group之前,否则MongoDB无法使用索引来帮助排序。

但是,在您的查询中,与您的 group_members 集合的总大小相比,您似乎想要查询相对较少数量的 user_id。所以我建议只在 user_id 上建立索引。在那种情况下,MongoDB 将不得不根据 last_post_at 对内存中的结果进行排序,但这是值得的,以换取使用索引进行 user_id 的初始查找。

关于mongodb - 如何使用匹配、排序和限制对 MongoDB 聚合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17053323/

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