游标操作 cursor
(1)游标是什么?通俗来说,游标不是查询结果,而是查询的返回资源或接口。
(2)通过这个接口可以逐行读取。就像php的fopen打开文件,得到一个资源一样,通过资源,可以一行一行读取文件。
操作游标
- 声明游标
var mycursor = db.bar.find({_id:{lte:5}})
- 判断游标是否已取到尽头
mycursor.hasNext()
- 取出游标的下一个单元
mycursor.next()
- 循环游标
for (; mycursor.hasNext(); ) {print(mycursor.next())}
- 通过cursor一次性取得所有数据并返回数组
printjson(mycursor.toArray())
printjson(cursor.toArray()[2]) // 打印第3行数据
注意: 不要使用printjson
原因: 会把所有的行立即以对象形式立即存储到内存里
可以在取出少数几行时,用此功能
6.迭代函数
允许我们自定义回调函数来逐个处理每个单元
cursor.forEach(回调函数):
var getTitle = function(obj) {print(obj.goods_name)};
var cursor = db.goods.find();
cursor.forEach(getTitle);
7.游标在分页中的使用
比如查到10000行,跳过100页,取10行
一般的,我们假设每页N行,当前是page页,就需要跳过前(page-1) * N 行,再取N行出来.
在mysql中,我们需要用limit offset N来实现
在mongo中,我们需要用skip(), limit()函数来实现
(1)查询结果中,跳过前9995行
var mycursor = db.bar.find().skip(9995)
mycursor.forEach(function(obj){printjson(obj)})
(2) 查询第901页,每页10条
var mycursor = db.bar.find().skip(9000).limit(10)
网友评论