我目前的聚合是:
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 有性能并且仍然以正确的顺序返回它。
更新:我希望找到一种解决方案来限制加载到内存中的文档数量。这将是一个相当大的集合并且非常频繁地访问。