【MongoDb探究】07-游标操作
来源:互联网 发布:中国水果消费数据统计 编辑:程序博客网 时间:2024/06/07 03:48
之前我们学习了“增删改查”四中语法和查询表达式的深入学习,我们已经
掌握了一定的操作mongodb数据的能力,那么接下来我们就要考虑我们的操作
的效率问题了。
(1)游标介绍
如果我们查询的数据量比较大会怎样?
我们首先插入10000条数据,因为mongodb底层是javascript引擎,所以我们
可以使用js的语法来插入数据:
效果:
我们查询一下,确实是插入进去了:
事实上在日常的业务中,很少有一次性取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方法会把所有
的行立即以对象的形式组织在内存里,十分耗费内存,可以在取出少
掌握了一定的操作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
0 0
- 【MongoDb探究】07-游标操作
- mongodb 高级操作:聚合,游标
- MongoDB游标的基本操作
- 【MongoDb探究】03-mongodb基本操作语句
- mongodb的高级操作(游标、聚合)
- MongoDB游标,limit,skip,sort操作
- 【MongoDb探究】04-mongodb的CURD操作详解
- MongoDB:详细解释mongodb的高级操作,聚合和游标
- 探究 MongoDB
- mongodb 游标
- MongoDB游标
- MongoDB 游标
- 学习MongoDB 六: MongoDB查询(游标操作、游标信息)(三)
- MongoDB开发学习(2)--文档操作、查询和游标
- MongoDB文档翻译-CRUD操作-在mongo Shell中迭代游标
- Mongodb–journal探究
- 【MongoDb探究】08-索引
- MongoDB索引探究
- 第十章 Two-Phase Termination
- Android第十七课;有返回结果的页面跳转
- AJAX--实例分析
- [Unity XLua]热更新XLua入门(一)-基础篇
- HTML5常见面试题及答案(一)
- 【MongoDb探究】07-游标操作
- Java的ResourceBundle读取properties文件
- 最少操作次数的简易版
- 作为前端你不得不知-浏览器的工作原理:网络浏览器幕后揭秘
- 396. Rotate Function
- 二元查找树转变成排序的双向链表
- SpringBoot学习
- android自定义view--构造函数讲解
- 20170114C++阶段班04_STL_01string