之前我们学习了“增删改查”四中语法和查询表达式的深入学习,我们已经
掌握了一定的操作mongodb数据的能力,那么接下来我们就要考虑我们的操作
的效率问题了。

(1)游标介绍
如果我们查询的数据量比较大会怎样?

我们首先插入10000条数据,因为mongodb底层是javascript引擎,所以我们
可以使用js的语法来插入数据:

  1. for(var i=0;i<10000;i++){
  2. db.bar.insert({_id:i+1,title:'helloWorld',content:'aaa'+i});
  3. };

效果:


我们查询一下,确实是插入进去了:


事实上在日常的业务中,很少有一次性取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--游标的更多相关文章

  1. 用游标实现查询当前服务器所有数据库所有表的SQL

    declare @name varchar(100) DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT Name FROM Master..SysDatabase ...

  2. 使用rowid抽取数据方法以及大数据量游标卡住的应对

    平时工作的时候,经常会遇到这种事情,从一个大表A中,抽取字段a在一个相对较小B的表的数据,比如,从一个详单表中,抽取几万个用户号码的话单出来.这种时候,一般来说, 做关联查询: create tabl ...

  3. Mysql - 游标/动态sql/事务

    游标这个在我目前的项目里面用的还不多, 但是其功能还是很强大的. 动态sql以前都没用过, 是跟着富士康(不是张全蛋的富土康哦)过来的同事学的. 还是挺好用的. 我的数据库方面, 跟他学了不少. 在此 ...

  4. SQL Server 游标运用:鼠标轨迹字符串分割

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 游标模板(Cursor Template) 鼠标轨迹字符串分割SQL脚本实现(SQL Code ...

  5. 读书笔记--SQL必知必会21--使用游标

    21.1 游标 结果集(result set),SQL查询说检出的结果. 游标(cusror),是一个存储在DBMS服务器上的数据库查询. 游标不是一条SELECT语句,而是被该句检索出来的结果集. ...

  6. sqlserver 游标的使用

    declare @temp_temp uniqueidentifier--临时变量 DECLARE aaa CURSOR for select Id from A ------------------ ...

  7. MySQL动态游标

    通过(准备语句+视图+静态游标)实现 -- 建立测试表和数据 create table webuser (username varchar(10)); insert into webuser valu ...

  8. SQL Server游标(转)

    清晰地介绍了SQL游标,很好的学习资料. 转自 http://www.cnblogs.com/knowledgesea/p/3699851.html 什么是游标 结果集,结果集就是select查询之后 ...

  9. ABAP游标的使用

    在Oracle,SQLServer中游标的使用是经常的,所以在ABAP不懂是不行的......     1.声明游标 OPEN CURSOR [WITH HOLD] <c> FOR SEL ...

  10. Sybase_游标

    本章将介绍如何在Sybase下使用游标 因业务需要,要批量处理一些数据,sql需要用到循环,所以要使用游标,我写了一个简单的游标,sql如下 DECLARE my_Cursor CURSOR FOR ...

随机推荐

  1. 前端自动化部署之gulp

    1.首先需要安装node+npm(这里不再叙述,网上教程一大堆) 2.gulp全局安装:npm install -g gulp 3.cd进入到你的项目目录,这里使用demo文件夹为我的示例项目 4.在 ...

  2. java中float和double的区别

    float表示单精度浮点数在机内占4个字节,用32位二进制描述. double表示双精度浮点数在机内占8个字节,用64位二进制描述.浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分. ...

  3. python setup.py install 报错ImportError: No module named setuptools

    学习光荣之路python课程时,使用python setup.py install安装其他模块时,第一次安装某模块成功了.安装另一模块却报错ImportError: No module named s ...

  4. mysql最大连接数问题

    进入mysql系统就, 查询最大连接数:show variables like 'max_connections'; 修改最大连接数:set global max_connections=1000;

  5. iOS摇一摇功能、震动功能、简单的摇动动画、生成二维码图片与发送短信等几个功能

    有一个开锁的功能,具体的需求就类似于微信的"摇一摇"功能:摇动手机,手机震动,手机上的锁的图片摇动一下,然后发送开锁指令.需求简单,但用到了许多方面的知识. 1.摇一摇 相对这是最 ...

  6. 移动端ios电话号码

    <meta name="format-detection" content="telephone=no"> <meta http-equiv= ...

  7. CMA-连续内存分配

    CMA: Contignous Memory Allocator,连续内存分配,一般是分配给Camera,HDMI等使用,避免预留大块内存 1.声明连续内存 使用dma_contignous_rese ...

  8. android ScrollView中嵌套listview listview可点击处理,可展开

    public class MyListView extends ListView { public MyListView(Context context, AttributeSet attrs, in ...

  9. 淘淘商城_day10_课堂笔记

    今日大纲 Dubbo入门学习 使用dubbo优化单点登录系统 系统间服务调用方式 浏览器直接访问 浏览器发起请求,通过ajax或jsonp方式请求: Httpclient方式 系统与系统之间通过Htt ...

  10. Linux服务器操作系统

    Linux服务器操作系统 今日大纲 ●    服务器操作系统的系列.Linux的主流产品.虚拟机软件 ●    安装linux ●    linux基本命令 ●    用户管理及权限(多用户) ●   ...