mongodb多集合如何实现分页查询?
发布于 9 年前 作者 XueQian 6924 次浏览 最后一次编辑是 8 年前 来自 问答

mongodb中有两个集合:user以及topic user中字段为:userId,userName,userImage topic中字段为:topicId,userId,topicText,topicImage 现在要实现分页查询,客户端一个get请求需要得到userName,userImage,topicText,topicImage.如果一次返回20条数据,下一次返回接下来的20条,该如何实现? 我查到的是分页主要就是用到2个函数:limit和skip 但是,数据量太大的时候,就不适合用skip分页了。 《MongoDB权威指南》中给出的解决方案是:获取上一页的最后一条数据,然后使用gt和limit获取下一页的数据。 如果数据量达到100万加或者某一个数量级时,是否要加缓存?什么时候需要加缓存?mongodb单纯的实现分页可以不加缓存吗?? 谢谢了

6 回复

首先,排序是必要的对吧!你可以先按时间排序,或者,直接添加一个自增长的字段。 从当前页的,最后一个元素,的排序字段的值,开始向下查询。

哇!你们的论坛,能达到100W的数据量?

@359056163 恩,用时间进行排序。对于我的两个集合(user以及topic)中的数据,我返回他们的综合,需要一个临时集合来保存所有数据吗?再对临时集合使用游标进行处理? PS:100万加是为了说明有很多数据,需不需要加缓存。见笑了,不是论坛哈哈

对M库完全没概念,以下纯属猜测。

这种方式的分页没有必要考虑缓存。若是这样,实现M库的设计者的思路就有问题。gt和limit合起来,其底层实现方法应该和sql-where类似,从底层开始只出少量数据。

《MongoDB权威指南》中给出的解决方案是:获取上一页的最后一条数据,然后使用gt和limit获取下一页的数据。 这一句的意思是,在 sql 中。先获取最后一条数据的 id,然后 gt 该 \id,再 limit。这样相比 skip 要减少很多扫描量。 但在 mongodb 里面,_id并不是有序增长的吧?不懂这招还有没有效。

这跟缓存的关系感觉不大。

回到顶部