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

最新文章

  1. 一鼓作气 博客--第八篇 note8
  2. [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [四] JSON数据解析
  3. Android性能优化文章转载
  4. DMSFrame 之简单用法(一)
  5. Java中如何使封装自己的类,建立并使用自己的类库?
  6. maven 一好用的仓库镜像
  7. Inno Setup 安装前卸载原程序
  8. 黄聪:NaviCat通过Http方式连接服务器的MySQL数据库(转)
  9. Cocos2dx老版本适配64位
  10. hibernate错误提示
  11. keep健身计划
  12. SSH框架项目开发命名规范
  13. Hackers&#39; Crackdown UVA - 11825 (状压dp)
  14. easyui的下拉框combox动态复赋值显示在前端
  15. 剑指Offer-第一个只出现一次的字符位置
  16. js的简单介绍
  17. HTML5服务器消息推送(java版)
  18. 深入解密.NET(Tuple元祖)
  19. 自然语言处理工具HanLP被收录中国大数据产业发展的创新技术新书《数据之翼》
  20. Docker 持续集成初次体验

热门文章

  1. git 克隆到本地linux目录的2种方式
  2. Oracle新实例创建
  3. Delphi关键词
  4. mac版tomcat修改端口无法访问,80端口无法访问
  5. Hadoop实践
  6. 如何获取本机IP
  7. jquery常用的选择器
  8. notepad++正则表达式替换字符串详解
  9. if和switch的原理
  10. java URLEncoder 和Base64.encode()