MongoDB 游标与分页_mongocursor 分页-程序员宅基地

技术标签: MongoDB  

说明:本篇文章主要介绍MongoDB 中游标(cursor)的使用,以及使用 skip() 与 limit() 函数实现分页,最后讲解 sort() 函数进行排序。

MongoDB 游标(cursor)

所谓游标就是指的是数据可以一行行的进行操作,非常类似于 ResultSet(java中的数据对象) 数据处理。在 MongoDB 中对于游标的处理也比较简单,只需要使用 find() 函数就可以返回游标。

声明游标

// 获取游标
var cursor = db.collection.find({});

// 判断是否还有下一行数据
cursor.hasNext();

// 获取当前文档数据
cursor.next()

示例:使用循环来操作

var obj;
var cursor = db.collection.find();
while( cursor.hasNext() ){
    obj = cursor.next();
    // todo 
    ...
}

示例:使用 javaScript 中的 forEach 迭代数据

var obj;
var cursor = db.collection.find();
cursor.forEach(function(item){
    // todo
    ...
})

游标的生命周期

游标会消耗一定的内存和资源,下面几种情况会释放游标占用的资源

  • 游标遍历完成以后
  • 客户端发送终止消息
  • 游标超过 10 分钟没有被使用

 

MongoDB 分页

MongoDB 分页需要使用到的两个函数 limit() skip() ,如果我们需要排序,就可以使用 sort() 函数

limit: 限制游标返回的数量,指定了上限 
skip: 忽略前面的部分文档,如果文档总数量小于忽略的数量,则返回空集合 
sort: 得到的子集合进行排序,可以按照多个键进行正反排序!

limit()skip() 的使用

示例:只查询前面 50 条数据

db.collection.find().limit(50);

示例:跳过前面 50条数据

db.collection.find().skip(50);

sort() 函数的使用

要进行排序使用 sort,对应的 key 值为 1 升序,-1 为降序

示例:使按照 价格 price 从高到低 排序。

db.collection.find().sort({price: 1});

示例:使用 price 和 name 两个字段都是升序排序

db.collection.find().sort({price: 1, name: 1});

分页实现

第一种方法:数据量比较少的时候可以使用这种。

// 查询第一页的数据
db.test.find().sort({"price":1}).limit(20);

// 查询第二页的数据
db.test.find().sort({"price":1}).limit(20).skip(20);

// 后面的数据就依次类推
db.test.find().sort({"price":1}).limit(20).skip(40);
...

第二方式:因为 skip() 函数比较消耗资源,所以下面的方式避开使用 skip () 操作。

// 取到第一页数据
var page1 = db.test.find().sort({"price":1}).limit(20);
var latest ;
// 判读是否有下一页数据
while( page1.hasNext() ){
    latest = page1.next();
}

// 查询下一页的数据
db.test.find({"price": {"$gt": latest.price}  }).sort({"price":1}).limit(20);

对于这种操作就需要记录当前记录的那个值,然后每次取大于这值后面一页的数据,此时是避免使用 skip() 函数,效率高一些。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_18948359/article/details/88637529

智能推荐

linux下编译GDAL外加扩展格式支持(五)--完-程序员宅基地

文章浏览阅读229次。接1、2、3、4篇。10、安装mysql支持安装fedora15或者16系统时若选择安装mysql数据库,则必须自行安装mysql开发包。因为自带默认数据库不会安装这个包。否则会遇到mysql错误:ogr_mysql.h:34:23: fatal error: my_global.h: No such file or directory#问题原因:找不到mysql头文件..._linux gdal netcdf5

Linux tc qdisc 模拟网络丢包延时-程序员宅基地

文章浏览阅读1.2k次。Linux tc qdisc 模拟网络丢包延时_tc qdisc

linux64bit 安装 jdk 1.7-程序员宅基地

文章浏览阅读336次。linux64bit 安装 jdk 1.7下载地址 : https://edelivery.oracle.com/otn-pub/java/jdk/7u21-b11/jdk-7u21-linux-x64.rpm0. 卸载rpm版的jdk: #rpm -qa|grep jdk 显示:jdk-1.6.0_10-fcs 卸载:#rpm -e --nodep..._liunx64位得jdk1.7

【Linux笔记】-----Nginx/LVS/HAProxy负载均衡的优缺点_中间件应用场景nginx lvs proxy-程序员宅基地

文章浏览阅读552次。开始听到负载均衡的时候,我第一反应想到的是链路负载均衡,在此之前主要是在学习网络方面知识,像在NA、NP阶段实验做链路负载均衡时常会遇到,后来还接触到SLB负载分担技术,这都是在链路基础上实现的。 其实负载均衡可以分为硬件实现负载均衡和软件实现负载均衡。 硬件实现负载均衡:常见F5和Array负载均衡器,配套专业维护服务,但是成本昂贵。 软件实现负载均衡:常见开源免费的负载均衡软件有Ngin..._中间件应用场景nginx lvs proxy

多维时序 | MATLAB实现CNN-LSTM多变量时序预测_cnn可以进行多步预测-程序员宅基地

文章浏览阅读4.7k次。多维时序 | MATLAB实现CNN-LSTM多变量时序预测目录多维时序 | MATLAB实现CNN-LSTM多变量多步预测基本介绍模型特点程序设计学习总结参考资料基本介绍本次运行测试环境MATLAB2020b,MATLAB实现CNN-LSTM多变量多步预测。模型特点深度学习使用分布式的分层特征表示方法自动提取数据中的从最低层到最高层固有的抽象特征和隐藏不变结构. 为了充分利用单个模型的优点并提高预测性能, 现已提出了许多组合模型。CNN 是多层前馈神经网络, 已被证明在提取隐藏_cnn可以进行多步预测

随便推点

【9.3】用户和组的管理、密码_polkitd:input 用户和组-程序员宅基地

文章浏览阅读219次。3.1 用户配置文件和密码配置文件3.2 用户组管理3.3 用户管理3.4 usermod命令3.5 用户密码管理3.6 mkpasswd命令_polkitd:input 用户和组

pca算法python代码_三种方法实现PCA算法(Python)-程序员宅基地

文章浏览阅读670次。主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域。它的主要作用是对高维数据进行降维。PCA把原先的n个特征用数目更少的k个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的k个特征互不相关。关于PCA的更多介绍,请参考:https://en.wikipedia.org/wiki/Prin..._inprementation python code of pca

内存地址Linux下内存分配与映射之一-程序员宅基地

文章浏览阅读35次。发一下牢骚和主题无关:地址类型:32位的cpu,共4G间空,其中0-3G属于用户间空地址,3G-4G是内核间空地址。用户虚拟地址:用户间空程序的地址物理地址:cpu与内存之间的用使地址总线地址:外围总线和内存之间的用使地址内核逻辑地址:内存的分部或全体射映,大多数情况下,它与物理地址仅差一个偏移量。如Kmalloc分..._linux 内存条与内存地址

自动化测试介绍_自动化测试中baw库指的什么-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏16次。什么是自动化测试?   做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。  首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner、jmeter),或自己所写的一段程序,用于_自动化测试中baw库指的什么

a0图框标题栏尺寸_a0图纸尺寸(a0图纸标题栏尺寸标准国标)-程序员宅基地

文章浏览阅读1.6w次。A0纸指的是一平方米大小的白银比例长方形纸(长为1189mm宽为841mm)。A0=1189mm*841mm A1=841mm*594mm 相当于1/2张A0纸 A2=594mm*420mm 相当于1/4.A1图纸大小尺寸:841mm*594mm 即长为841mm,宽为594mm 过去是以多少"开"(例如8开或16开等)来表示纸张的大小,我国采用国际标准,规定以 A0、A1、A2、.GB/T 14..._a0图纸尺寸

TreeTable的简单实现_treetable canvas-程序员宅基地

文章浏览阅读966次。最终效果图:UI说明:针对table本身进行增强的tree table组件。 tree的数据来源是单元格内a元素的自定义属性:level和type。具体代码如下:Java代码 DepartmentEmployeeIDposi_treetable canvas