mongoDB7--游标

时间:2020-12-02 13:50:28

之前我们学习了“增删改查”四中语法和查询表达式的深入学习,我们已经
掌握了一定的操作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. };

效果:
mongoDB7--游标

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

事实上在日常的业务中,很少有一次性取10000条数据的,但是有时候
从数据库取出来的数据是跨数据的,比如取第100页的数据。我们查询
的时候不想一次性取出那么多数据,想进行逐条处理,这个时候我们就
需要使用“游标(cursor)”来解决。

什么是“游标”?
通俗的说,游标不是查询结果,而是查询的一个返回资源或者接口,通过
这个接口,可以逐条读取数据。
就类似java中的读取流一样,使用包装类的readLine()方法一行一行去读。
mongoDB7--游标

(2)游标使用语法
声明游标:
var cursor=db.collectionName.find({filed:value,...});
find的查询结果赋值给了游标cursor变量。

我们获取我们刚刚插入的10000条数据的游标对象(条件是_id<=5),然后分别打
印所有数据的信息:
mongoDB7--游标
其中next()方法就是取出下一个数据。printjson就是以json格式打印出数据。

同样也可以使用js的while语法来循环打印刚刚的数据:
mongoDB7--游标

当然也可以使用for循环来打印:
mongoDB7--游标

还有一个比较常用的方法,叫“forEach”,每一个forEach里面有一个
回调函数,这个函数中的obj对象就是游标指向的数据集的每一个数据。
mongoDB7--游标

这个方法给了我们很大的*度,可以在回调函数中做一些我们想做的操作。

(3)游标在数据库的应用
游标在分页时如何使用?
例如查询到10000行,跳过100页,取10行。
一般的,我们假设每页N行,当前是page页,就需要跳过(page-1)*N行,
再取N行。在Mysql中,我们可以使用limit offset,N来实现。
在mongodb中,使用skip(),limit()函数来实现。

我们取出我们10000条数据的第9996-10000条的数据,可以使用skip()
函数来实现:
mongoDB7--游标

可以使用limit限制取出的数据条数,
我们查询第801页,每页10条:
mongoDB7--游标

同理,也可以在查询的时候使用分页方法:
mongoDB7--游标

如果我们不想迭代打印,想直接把结果以数组的形式打印出来,
使用游标的toArray()方法:
mongoDB7--游标

想取出某一个,使用数组的下标即可:
mongoDB7--游标

这里要提醒大家的是,如果查询少量的数据,可以使用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 - 游标&sol;动态sql&sol;事务

    游标这个在我目前的项目里面用的还不多, 但是其功能还是很强大的. 动态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&lowbar;游标

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

随机推荐

  1. create a inatll package

    gcc -o hell t.c tar -jxf  hell.tar.bz2 [root@localhost ~]# cat install.sh #!/bin/bashlines=7tail -n ...

  2. scrollview 例子2

    代码: #import "RootViewController.h" @implementation RootViewController @synthesize scrollVi ...

  3. centos 单独安装nginx

    安装包下载网址: http://nginx.org/en/download.html 进入Linux文件夹执行 wget http://nginx.org/download/nginx-1.8.0.t ...

  4. Android studio 安装的安装一些问题

    在国内如何更新android sdk? 由于众所周知的某些原因,我们无法直接连接android sdk的更新服务更新sdk,所以可以通过国内的ftp站点把常用的sdk组件如android platfo ...

  5. C&num;读取数据库返回泛型集合(DataSetToList)

    一般我们用使用ADO.NET查询数据库返回泛型集合使用SqlDataReader逐行读取数据存入对象 代码 }

  6. AD模块电压采集电路

    之前一直没搞明白模拟电压转换电路,不知道应该怎么计算转换电压,最近一个项目中用到几处模拟电压的采集,硬件是由其他同事设计的,转换公式也是他给的,记录一下: 24V电压采集: 公式:Vout = Vin ...

  7. 009 pandas的Series

    一:创建 1.通过Numpy数组创建 2.属性查看 3.一维数组创建(与numpy的创建一样) 4.通过字典创建 二:应用Numpy数组运算 1.获取值 numpy的数组运算,在Series中都被保留 ...

  8. &lt&semi;ROS&gt&semi; 通讯方式之 Action

    Ros 官网介绍 http://wiki.ros.org/actionlib 一个简易的action教程,package -- example_action_server. action文件夹内存放 ...

  9. Entity Framework工具POCO Code First Generator的使用

    在使用Entity Framework过程中,有时需要借助工具生成Code First的代码,而Entity Framework Reverse POCO Code First Generator是一 ...

  10. 查询各分类中最大自增ID

    假如现在有表结构: CREATE TABLE `msg_detail` ( `id` ) NOT NULL AUTO_INCREMENT COMMENT 'id', `title` ) NOT NUL ...