要求不用skip

前提:1.时间倒序排列(自己现在的项目中也是按照时间倒序排列的)

      2.每页显示10条数据

int limit = 10;//刚开始点击查询的时候设置十条

查询形式为 db.find(query).sort(time,-1).limit(limit)方式

注:query是查询条件,其中包括了时间段的条件,例如 a=<time<=b的限制

1)记录每一页的第一条数据的时间firstTime

2)记录每一页最后一条数据的时间lastTime

在查询之前判断用户是点击下一页还是上一页,在这里用clickPrePage的值是否为空来判断是否点击上一页

同理用clickNextPage的值是否为空来判断是否点击下一页

    

    //逻辑代码如下   

    if(notEmpty(clickPrePage){//点击上一页

       limit = clickPrePage*10;

       查询条件的时间条件设置为>=firstTime     

    }//end if

    

    if(notEmpty(clickNextPage){//点击下一页

        limit = clickNextPage * 10;

        查询条件的时间条件设置为<=lastTime

    }//end if

代码说明:

   比如当前页是第5页,当点击第4页的时候,由于每页要显示十条,所以按照上面的逻辑limit=40,也就是查询40条,取后十条记录显示即可

   同理,当点击第6页的时候。此时limit=60,查询60条,取最后十条显示

   当然,当用户输入跳转的时候同样的逻辑,比如当前页还是取第五页为例,此时用户要跳转到第100页,那么此时limit=1000,取最后10条显示即可

由于每页显示10条数据,需要从查询的结果中获取10条,所以while循环可以这么写

int index=0;

while(cursor.hasNext()&index<limit){//确保循环十次,让集合list的size=10,把list传到前台,来达到每页显示十条数据的目的

int i = limit-index;

    

   //查询结果放入集合list中,要取查询结果的后10条

   if(i<10){   

   

     //记录每页第一条数据的时间

      if(i==9){

        fistTime = db.get("time").toString();

      }

      

      //记录每页最后一条数据的时间

      if(i==0){    

          lastTime = db.get("time").toString();

      }

      list.add(cursor.hasNext().next());

   }//end if

   

    index++;  

    

}//end while

缺点:

  在跨页跳转时由于不能确定要跳转的页面的前一页的lastTime,所以根据前面设定的limit,需要查询一些不必要的数据,  然后从这些数据取后10条也就是需要的数据来显示,效率上仍有些欠缺。

    比如:当前页为currentPage,记录此页的lastTime假设为a,要跳转到currentPage+100页,需要根据currentPage的lastTime来作为查询条件,而没法获取currengPage+99页的数据的lastTime来进一步缩小查询范围.

未完待续

以上方法有不当之处,欢迎批评指正,如果好的方法,希望能交流一下

mongodb查询分页优化的更多相关文章

  1. 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案

    如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案

  2. 使用聚集索引和非聚集索引对MySQL分页查询的优化

    内容摘录来源:MSSQL123 ,lujun9972.github.io/blog/2018/03/13/如何编写bash-completion-script/ 一.先公布下结论: 1.如果分页排序字 ...

  3. 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题

    最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...

  4. 【MySQL】分页优化

    前段时间由于项目的原因,对一个由于分页而造成性能较差的SQL进行优化,现在将优化过程中学习到关于分页优化的知识跟大家简单分享下. 分页不外乎limit,offset,在这两个关键字中,limit其实不 ...

  5. 高性能MySQL笔记 第6章 查询性能优化

    6.1 为什么查询速度会慢   查询的生命周期大致可按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段. ...

  6. mongodb查询文档

    说到查询,我们一般就想起了关系型数据库的查询了,比如:order by(排序).limit(分页).范围查询(大于某个值,小于某个值..,in查询,on查询,like查询等待很多),同样mongodb ...

  7. mysql笔记03 查询性能优化

    查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...

  8. MySQL 百万级分页优化

    MySQL 百万级分页优化 http://www.jb51.net/article/31868.htm 一般刚开始学SQL的时候,会这样写 : , ; 但在数据达到百万级的时候,这样写会慢死 : , ...

  9. SQL Server查询性能优化——堆表、碎片与索引(二)

    本文是对 SQL Server查询性能优化——堆表.碎片与索引(一)的一些总结.  第一:先对 SQL Server查询性能优化——堆表.碎片与索引(一)中的例一的SET STATISTICS IO之 ...

随机推荐

  1. 【译】在Asp.Net中操作PDF – iTextSharp - 操作图片

    原文 [译]在Asp.Net中操作PDF – iTextSharp - 操作图片 作为我的iTextSharp系列的文章的第七篇,开始探索使用iTextSharp在PDF中操作图片,理解本篇文章需要看 ...

  2. 使用ACE获取主机的IP地址

    使用ACE获取主机的IP地址,不知道为什么会有127.0.0.1? #include "stdafx.h" #include "ace\OS.h" #inclu ...

  3. 经典集合 与 IQueryable集合 的差别

    经典集合 与 IQueryable集合 的差别 经典集合与IQueryable 集合存在本质的区别,经典结合是在内存中开辟一片区域用来存储数据,而IQueryable集合是延迟加载的集合,只有在用到的 ...

  4. iTunes Store:隐藏和取消隐藏已购项目

    使用 Mac 或 PC 上的 iTunes 来隐藏或取消隐藏已购项目. 如何隐藏已购项目 在 Mac 或 PC 上打开 iTunes. 从 Store 菜单中,选取商店 > 登录,然后输入您的 ...

  5. input标签的hidden属性的应用及作用

    定义:传输关于客户端/服务器交互的状态信息. Transmits state information about client/server interaction. 解释: 此元素在页面中不显示,在 ...

  6. SDL2源码分析6:拷贝到渲染器(SDL_RenderCopy())

    ===================================================== SDL源码分析系列文章列表: SDL2源码分析1:初始化(SDL_Init()) SDL2源 ...

  7. Java byte数据类型详解

    public static String bytes2HexString(byte[] b) { String ret = ""; for (int i = 0; i < b ...

  8. jquery-easyui实现页面布局和增删改查操作(SSH2框架支持)转载

    http://blessht.iteye.com/blog/1069749/ 已注册:ooip 关联的csdn 前几天心血来潮用jquery-easyui+spring.struts2.hiberna ...

  9. Qt布局管理

    原地址:http://blog.csdn.net/lastsoup/article/details/7028243 设计软件中各个部件的位置排列,有两种方法: 1.设置widget的在父窗体中的坐标和 ...

  10. Swift - 实现点击UITableView单元格时自动展开单元格

    下面是一个列表单元格cell的折叠展开效果的demo.当点击单元格时会展开该单元格,便于显示一些详情什么的.点击其他单元格原来的会关闭,同时有动画效果. 效果如如下:   代码如下: 1 2 3 4 ...