1、cursor(游标)是什么?
通俗的说,游标不是查询结果,而是查询的返回资源,或者接口
通过这个接口,你可以逐条读取
就像php中的fopen打开文件,得到一个资源一样,通过资源,可以一行一行的读文件
2、声明游标
语法:
var cursor = db.collectioName.find(query,projection);
curosr.hasNext() 判断游标是否已经取到尽头
cursor.next() 取出游标的下一个单元
3、用while循环打印游标
> var mycursor = db.stu.find({sn:{$lte:100}})
> while (mycursor.hasNext()) {
... printjson(mycursor.next());
... }
4、游标还有一个迭代函数,允许我们自定义回调函数来逐个处理每个单元
cursor.forEach(回调函数)
> var cursor = db.stu.find({sn:{$lte:20}});
> cursor.forEach(printjson);
5、游标在分页中的应用
比如查到10000行,跳过100页,取10行
一般地,假设我们每页N行,当前是page页
就需要跳过前(page-1)*N行,再取N行,在mysql中,limit offset,N来实现
在mongodb中,用skip(),limit()函数来实现
> db.stu.find().skip(90).limit(5)
{ "_id" : ObjectId("5a10750aaf4c824abd7f0209"), "sn" : 91, "name" : "student91" }
{ "_id" : ObjectId("5a10750aaf4c824abd7f020a"), "sn" : 92, "name" : "student92" }
{ "_id" : ObjectId("5a10750aaf4c824abd7f020b"), "sn" : 93, "name" : "student93" }
{ "_id" : ObjectId("5a10750aaf4c824abd7f020c"), "sn" : 94, "name" : "student94" }
{ "_id" : ObjectId("5a10750aaf4c824abd7f020d"), "sn" : 95, "name" : "student95" }