当前位置: 首页 > 编程笔记 >

MongoDB快速翻页的方法

越星晖
2023-03-14
本文向大家介绍MongoDB快速翻页的方法,包括了MongoDB快速翻页的方法的使用技巧和注意事项,需要的朋友参考一下

翻阅数据是MongoDB最常见的操作之一。一个典型的场景是需要在你的用户界面中显示你的结果。如果你是批量处理的数据,同样重要的是要让你的分页策略正确,以便你的数据处理可以规模化。

接下来,让我们通过一个例子来看在MongoDB中翻阅数据的不同方式。在这个例子中,我们有一个CRM数据库的用户数据,我们需要通过翻阅浏览和在同一时间显示10个用户。所以实际上,我们的页面大小是10。下方是我们的用户文档的结构:

{

  _id,

  name,

  company,

  state

}

方法一:Using 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() ”的方法是有用的。如果您正在使用大数据集,您需要考虑其他方法。

方法二:Using find() 和limit()

以前的方法不能很好扩展其原因是skip() 命令。因此,本节的目标是实现分页不使用skip()命令。为此,我们将利用在存储数据中的自然顺序,比如时间戳或文档中存储的标识。

在这个例子中,我们将使用“_id”存储每个文档。“_id”是一个MongoDB 的ObjectID结构,即 12 字节结构包含了时间戳、机械加工、进程标识符、计数器等。总体思路如下 :

检索当前页中的最后一个文档 _id
在下一个页面检索文件大于此”_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 = ...

以上就是MongoDB快速翻页的方法,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍golang快速实现网页截图的方法,包括了golang快速实现网页截图的方法的使用技巧和注意事项,需要的朋友参考一下 golang是近几年发展非常迅猛的一款服务器端的语言,其生态也日益丰富。对于使用golang实现网页截图这个需求,笔者在经过一番调研之后发现大家有推荐Selenium方案,但是这一方案问题较多: 需要安装Selenium或是PhantomJS PhantomJS已经停

  • 本文向大家介绍Android实现欢迎页快速启动的方法,包括了Android实现欢迎页快速启动的方法的使用技巧和注意事项,需要的朋友参考一下 Android 欢迎页快速启动 大家应该都知道,在默认情况下,Android App在点击App logo到App完全启动这之间会有一段时间空白期。那么如何做到在用户点击logo图标之后立即打开App的界面而不是一段白屏或黑屏呢? 设置xml 在drawabl

  • 本文向大家介绍CentOS 7下用yum快速安装MongoDB的方法教程,包括了CentOS 7下用yum快速安装MongoDB的方法教程的使用技巧和注意事项,需要的朋友参考一下 前言 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。MongoDB是深受广大开源爱好者支持和研究的NoSQL数据库之一,它基于灵活的JSON文档方式,非常适

  • 本文向大家介绍NodeJS连接MongoDB数据库时报错的快速解决方法,包括了NodeJS连接MongoDB数据库时报错的快速解决方法的使用技巧和注意事项,需要的朋友参考一下 今天第一次尝试连接MongoDB数据库,具体步骤也很简单。 首先,通过NodeJS运行环境安装MongoDB包,进入要安装的目录,执行语句 npm install mongodb安装成功后,通过如下语句测试与数据库建立连接几

  • 问题内容: 我之前使用过ZurbFoundation和Skeleton,所以我对它们都很熟悉,但是我以前从未不必将现有网站转换为响应式网站。什么是转换我的网站最快的方法?使用上面的框架,还是为已经提供的代码添加媒体查询?(那还行吗?) 问题答案: 确定要支持的设备,然后添加带有以下内容的样式表:

  • 本文向大家介绍Js实现网页键盘控制翻页的方法,包括了Js实现网页键盘控制翻页的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Js实现网页键盘控制翻页的方法。分享给大家供大家参考。具体实现方法如下: 键盘控制翻页效果我想我们不少见了,经常在很多网站特别是相册的效果都可以直接使用键盘进行上下页进行翻页了,原理很简单,只要利用js监测用户是否有按上下键即可实现。 举例如下: js代码如下: