mongodb查询分页优化

转载 2015年07月07日 18:52:03
要求不用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查询分页优化(二)

项目中需要用mongodb来进行数据测存储和查询,其中涉及到分页:分页的要求如下 1)每页显示10条 由于数据量太大,cursor.count()获取的符合条件的数据量也很大,导致分页得分好几万页,...

mongodb查询分页优化

避免使用skip+limit的方式 前提:1.时间倒序排列(自己现在的项目中也是按照时间倒序排列的)       2.每页显示10条数据 int limit = 10;//刚开始点击查询的时候设置...

mongodb查询分页优化(二)

项目中需要用mongodb来进行数据测存储和查询,其中涉及到分页:分页的要求如下 1)每页显示10条 由于数据量太大,cursor.count()获取的符合条件的数据量也很大,导致分页得分好几...

Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)

SpringData MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的find的操作,我们上一篇介绍了基本...

MongoDB数据查询,分页,排序

MongoDB数据查询数据准备:persons.jsonvar persons = [{ name:"jim", age:25, email:"75431457@qq.com"...

C# MongoDB 查询,分组,聚合,排序,条件,分页

先下载个C#的驱动。MongoDB提供各种主流与非主流预言的开发驱动。 C# Driver 下载地址:这里 CSharp Driver Tutorial:这里 下载文件安装或者解压缩包 如果您...

springData+mongodb 条件查询+条件分页排序

背景: 最近做的缓存项目,镜像缓存取设备离线下发的消息. 技术支持是使用springmvc+springData,文档类型数据的存储就没使用mybatis. 因为以前没使用过springData,摸...

Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)

一.简介        SpringData  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的...

mongoDB(4):find()查询、分页、游标

为了方便试验,我先在persons里插入如下类似的几条数据(可以现在编辑器上打完语句在粘贴执行) 由于篇幅限制,这里就不展示所有数据,c m e分别表示语文数学英语的成绩 ...
  • zymx14
  • zymx14
  • 2016年07月19日 23:40
  • 2946

java操作mongodb(分页优化)

前面我们提到过,大数据量分页时,skip如果跳过大量的数据会很慢,这里针对这一情况,我们优化一下分页。 看代码: /** * 大数据量数据分页优化 * @param page * @par...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mongodb查询分页优化
举报原因:
原因补充:

(最多只允许输入30个字)