Tal*_*Tal 5 mongodb aggregation-framework
我当前的汇总是:
db.group_members.aggregate({
$match: { user_id: { $in: [1,2,3] } }
}, {
$group: { _id: "$group_id" }
}, {
$sort: { last_post_at: -1 }
}, {
$limit: 5
})
Run Code Online (Sandbox Code Playgroud)
对于以下文档结构:
{
_id: '...',
user_id: '...',
group_id: '...',
last_post_at: Date,
}
Run Code Online (Sandbox Code Playgroud)
我也有一个索引 {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
Run Code Online (Sandbox Code Playgroud)
我想知道如何使它在非常大的group_members中表现出色,并且仍然以正确的顺序返回它。
更新:我希望找到一种解决方案,以限制加载到内存中的文档数量。这将是一个相当大的集合,并且访问非常频繁。
将$ sort放在$ group之前,否则MongoDB无法使用索引来帮助进行排序。
但是,与group_members集合的总大小相比,在查询中看起来您想要查询的user_id数量相对较少。因此,我建议仅在user_id上建立索引。在这种情况下,MongoDB必须按last_post_at对您的结果进行排序,但这值得以使用user_id的初始查找索引来交换。
| 归档时间: |
|
| 查看次数: |
8780 次 |
| 最近记录: |