MongoDB 使用Skip和limit分页
使用Skip和limit可以如下做数据分页:
Code:
page1 = db.things.find().limit(20)
page2 = db.things.find().skip(20).limit(20)
page3 = db.things.find().skip(40).limit(20)
备注:可用于分页,limit是pageSize,skip是第n-1页*pageSize (n-1表示几 第1,2...页) skip表示跳过 多少条数据, 聚合管道的优化
1.$sort + $skip + $limit顺序优化
如果在执行管道聚合时,如果$sort、$skip、$limit依次出现的话,例如:
{ $sort: { age : -1 } },
{ $skip: 10 },
{ $limit: 5 }
那么实际执行的顺序为:
{ $sort: { age : -1 } },
{ $limit: 15 },
{ $skip: 10 }
$limit会提前到$skip前面去执行。
此时$limit = 优化前$skip+优化前$limit
这样做的好处有两个:
1.在经过$limit管道后,管道内的文档数量个数会“提前”减小,这样会节省内存,提高内存利用效率。
2.$limit提前后,$sort紧邻$limit这样的话,当进行$sort的时候当得到前“$limit”个文档的时候就会停止。
当数据量很小时,这样做分页完全没有问题。但是当数据量很大时,skip操作会变的很慢,应该避免使用。
(不止是mongoDb会这样,大部分数据库都是。)可以通过改变查询文档的规则来达到分页效果,避免使用skip来跳过大量的数据。
(通过计算,得到下次查询应该从什么地方开始)相关阅读:
C#操作读取、写入XML文档的实用方法
在页面中js获取光标/鼠标的坐标及光标的像素坐标
JS实现合并两个数组并去除重复项只留一个的方法
Android中实现布局背景模糊化处理的方法
仅30行代码实现Javascript中的MVC
JS小功能(button选择颜色)简单实例
MySQL中的CONCAT函数使用教程
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
IOS入门笔记之地理位置定位系统
jQuery中animate动画第二次点击事件没反应
wordpress自定义url参数实现路由功能的代码示例
C++实现打印1到最大的n位数
Win8系统怎么重装IE浏览器?Win8重装IE图文教程
gulp-htmlmin压缩html的gulp插件实例代码