mongodb多集合如何实现分页查询?nodejs

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单纯的实现分页可以不加缓存吗??
谢谢了

阅读 4k
评论
    2 个回答
    首先,Mongodb中,skip()略过太多数据,会引起效率低下,这是毋庸置疑的。
    一般情况下,过多数据大多会使用《MongoDB权威指南》里中提供的方法,当然前提是你比较在乎性能方面提升,至于缓存的使用应该与当前的业务关联比较大,如果数据实时性比较强的话,当十几页甚至前几十页都不能要缓存,这时缓存需要放在后面已经过时且更新频率较小的数据了;另一种情况就是实时性不强的,可以一开始就加上缓存,这样也避免直接与数据库操作,也提升效率。当然,分页使用缓存也会出现一些问题,例如相邻两页如果缓存更新不及时,可能会出现重复的几条数据,这也是不可避免的。
    考虑到业务方面,如果真有100万或者更多的数据,用户真的会一直往后翻?哪怕我们自己用也不一定会一直往后看吧,如果仅仅用于数据方面的东西的话,也可以不用分页,可以用MongoDB的游标,一条一条数据的过滤。具体使用还是在楼主根据实际业务来判断了
    

      关于mongodb分页使用skip或limit实现分页查询性能问题,在萌阔论坛有讨论:
      查看地址

        撰写回答

        登录后参与交流、获取后续更新提醒

        MongoDB 技术问答
        合作问答

        MongoDB 官方中文社区 和 SegmentFault 联合推出的 MongoDB 技术交流平台。 这是一个以社区力量为主,但...