mongoDB7--游标
之前我们学习了“增删改查”四中语法和查询表达式的深入学习,我们已经
掌握了一定的操作mongodb数据的能力,那么接下来我们就要考虑我们的操作
的效率问题了。
(1)游标介绍
如果我们查询的数据量比较大会怎样?
我们首先插入10000条数据,因为mongodb底层是javascript引擎,所以我们
可以使用js的语法来插入数据:
- for(var i=0;i<10000;i++){
- db.bar.insert({_id:i+1,title:'helloWorld',content:'aaa'+i});
- };
效果:
我们查询一下,确实是插入进去了:
事实上在日常的业务中,很少有一次性取10000条数据的,但是有时候
从数据库取出来的数据是跨数据的,比如取第100页的数据。我们查询
的时候不想一次性取出那么多数据,想进行逐条处理,这个时候我们就
需要使用“游标(cursor)”来解决。
什么是“游标”?
通俗的说,游标不是查询结果,而是查询的一个返回资源或者接口,通过
这个接口,可以逐条读取数据。
就类似java中的读取流一样,使用包装类的readLine()方法一行一行去读。
(2)游标使用语法
声明游标:
var cursor=db.collectionName.find({filed:value,...});
find的查询结果赋值给了游标cursor变量。
我们获取我们刚刚插入的10000条数据的游标对象(条件是_id<=5),然后分别打
印所有数据的信息:
其中next()方法就是取出下一个数据。printjson就是以json格式打印出数据。
同样也可以使用js的while语法来循环打印刚刚的数据:
当然也可以使用for循环来打印:
还有一个比较常用的方法,叫“forEach”,每一个forEach里面有一个
回调函数,这个函数中的obj对象就是游标指向的数据集的每一个数据。
这个方法给了我们很大的自由度,可以在回调函数中做一些我们想做的操作。
(3)游标在数据库的应用
游标在分页时如何使用?
例如查询到10000行,跳过100页,取10行。
一般的,我们假设每页N行,当前是page页,就需要跳过(page-1)*N行,
再取N行。在Mysql中,我们可以使用limit offset,N来实现。
在mongodb中,使用skip(),limit()函数来实现。
我们取出我们10000条数据的第9996-10000条的数据,可以使用skip()
函数来实现:
可以使用limit限制取出的数据条数,
我们查询第801页,每页10条:
同理,也可以在查询的时候使用分页方法:
如果我们不想迭代打印,想直接把结果以数组的形式打印出来,
使用游标的toArray()方法:
想取出某一个,使用数组的下标即可:
这里要提醒大家的是,如果查询少量的数据,可以使用toArray方法,
查询大量的数据不建议使用toArray方法,因为toArray方法会把所有
的行立即以对象的形式组织在内存里,十分耗费内存,可以在取出少
量几行时,使用此功能。
转载请注明出处:http://blog.csdn.net/acmman/article/details/54426116
mongoDB7--游标的更多相关文章
- 用游标实现查询当前服务器所有数据库所有表的SQL
declare @name varchar(100) DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT Name FROM Master..SysDatabase ...
- 使用rowid抽取数据方法以及大数据量游标卡住的应对
平时工作的时候,经常会遇到这种事情,从一个大表A中,抽取字段a在一个相对较小B的表的数据,比如,从一个详单表中,抽取几万个用户号码的话单出来.这种时候,一般来说, 做关联查询: create tabl ...
- Mysql - 游标/动态sql/事务
游标这个在我目前的项目里面用的还不多, 但是其功能还是很强大的. 动态sql以前都没用过, 是跟着富士康(不是张全蛋的富土康哦)过来的同事学的. 还是挺好用的. 我的数据库方面, 跟他学了不少. 在此 ...
- SQL Server 游标运用:鼠标轨迹字符串分割
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 游标模板(Cursor Template) 鼠标轨迹字符串分割SQL脚本实现(SQL Code ...
- 读书笔记--SQL必知必会21--使用游标
21.1 游标 结果集(result set),SQL查询说检出的结果. 游标(cusror),是一个存储在DBMS服务器上的数据库查询. 游标不是一条SELECT语句,而是被该句检索出来的结果集. ...
- sqlserver 游标的使用
declare @temp_temp uniqueidentifier--临时变量 DECLARE aaa CURSOR for select Id from A ------------------ ...
- MySQL动态游标
通过(准备语句+视图+静态游标)实现 -- 建立测试表和数据 create table webuser (username varchar(10)); insert into webuser valu ...
- SQL Server游标(转)
清晰地介绍了SQL游标,很好的学习资料. 转自 http://www.cnblogs.com/knowledgesea/p/3699851.html 什么是游标 结果集,结果集就是select查询之后 ...
- ABAP游标的使用
在Oracle,SQLServer中游标的使用是经常的,所以在ABAP不懂是不行的...... 1.声明游标 OPEN CURSOR [WITH HOLD] <c> FOR SEL ...
- Sybase_游标
本章将介绍如何在Sybase下使用游标 因业务需要,要批量处理一些数据,sql需要用到循环,所以要使用游标,我写了一个简单的游标,sql如下 DECLARE my_Cursor CURSOR FOR ...
随机推荐
- [SOJ] can I post the letter?
1155. Can I Post the letter Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description I am a t ...
- 【Python之路】第三篇--Python基本数据类型
运算符 1.算数运算: # 在py2的 取整除运算中 9//2 = 4.0 # 引入 from __future__ import division 9//2 = 4.5 # py3中不需要! 2.比 ...
- 浏览器标题栏添加小logo图片,记录一下,方便以后用
效果如图:这是富连网的logo的实现,只需一行代码,我就写给自己和那些不知道的人吧 <link rel="icon" type="image/x-icon" ...
- python 基础学习1
1.注释 与shell一样,python也是以#开始为注释语句 2.运算符 + - * / // ** python中有2种除法:单斜杠是普通除法,双斜杠是浮点数除法(结果四舍五入) < < ...
- Android:dialog去除边框的实现(自带Style的padding)
public void show(View view) { MyDialog myDialog=new MyDialog(MainActivity.this); myDialog.show(); // ...
- 如何优化 App 的启动时间
http://www.cocoachina.com/ios/20161102/17931.html App 运行理论 main() 执行前发生的事 Mach-O 格式 虚拟内存基础 Mach-O 二进 ...
- 设计模式 -- 责任链模式或者叫职责链模式(Chain of Responsibility(CoR))
什么是链?前后相连,一个连接下一个,其中包括多个节点,其实责任链模式也类似,他是多个对象之间相互关联,下一个对象的操作由上一个对象关联下来,上一个对象有个方法用于指向其他对象.职责链之间的前后关系是可 ...
- ActionBar 值 addTab 的小提示
今天测试时偶然发现当程序中 addTab 后,会默认触发第一个 tab 的 onTabSelected 事件方法 ActionBar actionBar = mActivity.getSupportA ...
- Nginx1.8.0版本平滑升级新版本1.9.7
原文:http://www.jb51.net/article/79878.htm 首先查看现在环境nginx的版本为1.8.0 编译的参数只指定了安装路径: 复制代码代码如下: [root@local ...
- HDU2363 最短路+贪心
Cycling Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...