MongoDB笔记-游标与分页

游标操作 cursor

游标是什么?
通俗的说,游标不是查询结果,而是查询的返回资源,或者接口
通过这个接口,你可以逐条读取,就像php中fopen打开文件,得到一个资源一样,
通过资源,可以一行一行的读文件。

声明游标

var cursor = db.[collection].find(query,{查询字段})

cursor.hasNext()判断游标是否已经读取到尽头
cursor.Next()取出游标的下1个单元

用while来循环游标

var mycursor = db.bar.find({_id:{$lte:5}})
while(mycursor.hasNext()){
    printjson(mycursor.next());
}

例:

// 声明游标
var cursor = db.goods.find();
// 循环游标
for(var doc=true;cursor.hasNext();) { printjson(cursor.next());}

游标还有一个迭代函数,运行我们自定义回调函数来逐个处理每个单元

cursor.forEach(回调函数)

例:

var gettitle = function(obj){ printjson(obj.goods_name)};
var cursor = db.goods.find();
cursor.forEach(gettitle);

游标在分页中的应用

比如查到10000行,跳过100页,取10行
一般来说,我们假设每页N行,当前是 page页
就需要跳过前(page-1)*N行,再取N行,在mysql中,limit offset,N来实现
在mongo中,用skip(),limit()函数来实现的
var mycursor = db.bar.find().skip(9995);
则查询结果中,跳过前9995行

查询第901页,每页10条
则是var mycursor = db.bar.find().skip(9000).limit(10)

通过cursor 一次性得到所有数据,并返回数组

var cursor = db.goods.find()
printjson(cursor.toArray());// 看到所有行
printjson(cursor.toArray()[2]); // 看到第二行

注意:不要随意使用toArray()
原因:会把所有的行立即以对象形式组织在内存里,
可以在取出少数几行时,用次功能。

游标几个销毁条件

1.客户端发来信息叫他销毁
2.游标迭代完毕
3.默认游标超过10分钟没用也会被清除

扫描二维码关注公众号,回复: 2209698 查看本文章

猜你喜欢

转载自blog.csdn.net/hundan_520520/article/details/81002691