我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用MongoDB快速分页

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用MongoDB快速分页

使用MongoDB快速分页

 

英文原文:

http://blog.mongodirector.com/fast-paging-with-mongodb/

 

通过你的数据分页是使用MongoDB最常用操作之一。典型的案例是需要在你的UI的表格中显示结果。如果你正在批处理数据,分页策略正确是很重要的,以致你的数据处理可扩展。

 

让我们通过一个示例来看看在MongoDB中通过数据分页的不同方法。在这个示例中,我们有一个用户数据库CRM,我们需要分页并一次显示10个用户。因此我们的分页大小是10.这是我们的用户文档结构:

{
_id,
name,
company,
state
}

 

方法1:使用skip()和limit()

 

MongoDB本地支持使用skip()和limit()命令的分页操作。skip(n)命令告诉MongoDB跳过n条结果,limit(n)命令告诉MongoDB限制结果长度为“n”个结果。典型地你会通过游标使用skip()和limit()命令 – 但是为了描述这个案例我们提供了控制台命令来完成相同的结果。因为代码的简洁性,也排除了检查代码的限制。

//Page 1
db.users.find().limit (10)
//Page 2
db.users.find().skip(10).limit(10)
//Page 3
db.users.find().skip(20).limit(10)
........

你明白了。通常获取第n页的代码像这样:

db.users.find().skip(pagesize*(n-1)).limit(pagesize)

然而随着数据大小的增长,该方法有严重的性能问题。原因是每次查询执行时,完整的结果集被构建,然后实例必须从集合的开始定位到特定的偏移位置。因为你的偏移增加,这个过程变得越来越慢。这个过程也不能有效利用索引。因此典型地“skip()”和“limit()”方法对于小的数据集时是有效的。如果你使用大数据集,你需要考虑其他方法。

 

方法2:使用find()和limit()

 

之前的方法扩展得不是很好的原因是skip()命令。因此这部分的目标是不使用“skip()”命令执行分页。我们使用时间戳或文档中的id以自然顺序存储数据。在这个示例中,我们使用存储在每个文档中的“_id”。“_id”是一个MongoDB的ObjectID结构,是一个12字节的结构,包含时间戳、机器、进程ID、计数器等。整体想法如下:

1. 获取当前页最后文档的_id

2. 获取大于该“_id”的下一页的文档


//Page 1
db.users.find().limit(pageSize);
//Find the id of the last document in this page
last_id = ...
//Page 2
users = db.users.find({'_id'> last_id}). limit(10);
//Update the last id with the id of the last document in this page
last_id = ...


该方法保持了存在于“_id”列中的固有顺序。也因为“_id”列默认被索引,查找性能非常好。如果你正使用的列没有被索引,你的性能将会变差 -- 因此确保该列有索引是很重要的。


如果你也想为你的分页以特定顺序排列数据,你可以用以上技术使用sort()从句。确保排序过程覆盖索引获得最佳性能非常重要。你可以使用.explain后缀到你的查询去决定。

users = db.users.find({'_id'> last_id}). sort(..).limit(10);
//Update the last id with the id of the last document in this page
last_id = ...


一如既往如果你有任何问题或者评论请随时联系我们support@mongodirector.com

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用MongoDB快速分页

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

快速解决mysql深分页问题

目录背景概括1、limit深分页问题描述2、sql慢原因分析聚簇索引和非聚簇索引常见解决方案通过子查询优化标签记录法方案对比实战案例总结背景日常需求开发过程中,相信大家对于limit一定不会陌生,但是使用limit时,当偏移量(offse
2022-07-13

怎么快速掌握PHP文章分页

这期内容当中小编将会给大家带来有关怎么快速掌握PHP文章分页,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。PHP语言为我们带来了许多功能的实现,应用范围非常广泛。我们今天为大家详细讲解有关PHP文章分页的
2023-06-17

Mybatis怎么快速实现分页查询

这篇文章主要讲解了“Mybatis怎么快速实现分页查询”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mybatis怎么快速实现分页查询”吧!目录前言首先创建一个Maven项目数据库中创建一张
2023-06-20

MySQL深度分页(千万级数据量如何快速分页)

目录前言案例优化小结前言 后端开发中为了防止一次性加载太多数据导致内存、磁盘IO都开销过大,经常需要分页展示,这个时候就需要用到MySQL的LIMIT关键字。但你以为LIMIT分页就万事大吉了么,Too young,too simple啊,
2022-05-20

使用 Python 30分钟 教你快速搭

10个优秀的程序员里,有9个人都有写博客的习惯。这是非常好的习惯,它使得知识得以提炼,转输出为输入,在提升自己的同时,还能利用互联网易传播的特性,将知识分享给每一个热爱学习的人。这是值得每个程序员,投入时间和精力去坚持做下去的事。博客既然是
2023-01-31

使用 golang for MongoDB 创建分页过滤器

问题内容我有一个很大的过滤器,我将提供它的一个片段。我试图通过异教化过滤器的映射,但收到错误消息the match filter must be an expression in an object获取过滤器func (app *cou
使用 golang for MongoDB 创建分页过滤器
2024-02-05

Docker 的快速使用

ubuntu安装 centos安装 安装完毕之后执行一下这条命令,可以避免每次使用docker命令都需要sudo权限 sudo usermod -aG docker $USER 阿里云docker镜像加速 DockerHub 遇到不懂或者不
2023-08-30

利用web.py快速搭建网页hellow

访问web.py官网 http://webpy.org/ 根据网站步骤,利用 pip install web.py 若没有 PIP 则先安装pip 运行  sudo apt-get install python-pip 网站安装p
2023-01-30

大数据报表怎么快速分页呈现

今天就跟大家聊聊有关大数据报表怎么快速分页呈现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在说明这个问题的处理方法前,先了解下是什么原因导致的大数据量报表呈现慢的问题。一般不外乎这
2023-06-03

MySQL 千万级数据量如何快速分页

前言 后端开发中为了防止一次性加载太多数据导致内存、磁盘IO都开销过大,经常需要分页展示,这个时候就需要用到MySQL的LIMIT关键字。但你以为LIMIT分页就万事大吉了么,Too young,too simple啊,LIMIT在数据量大
2022-05-16

Dreamweaver如何使用框架结构快速制作网页

这篇文章将为大家详细讲解有关Dreamweaver如何使用框架结构快速制作网页,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。方法如下1、打开Dreamweaver 软件,设置好站点,建立新文件,类型为HT
2023-06-08

编程热搜

目录