zoukankan      html  css  js  c++  java
  • mongo 游标

    游标是什么?

    通俗的说游标不是查询结果,而是查询的返回资源,或者说是查询返回的接口。

    通过这个接口,我们可以逐条读取数据。

    就像php中我们使用fopen打开文件,得到的是一个资源,通过这个资源,我们可以一行一行的读取这个文件

    1.声明游标:

    var cursor=db.collectionName.find(query,projection);

    cursor.hasNext();判断游标是否已经渠道尽头

    cursor.Next();取出游标的下一个单元

    其实就是把我们查询时候用到的语句db.collectionName.find();,赋值给一个变量

    2.用while来循环游标

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

    while(mycursor.hasNext()){

          //mycursor.next()取出的是bson格式,所以需要用printjson来转换一下

          printjson(mycursor.next());

    }

    3.使用for来循环游标

     

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

    例:

    var cursor=db.goods.find();

    printjson(cursor.toArray());//看到所有行

    printjson(cursor.toArray()[2]);//看到第2行

    注意:不要随意使用toArray()

    原因:会把所有的行立即以对象的形式组织在内存里,可以在取出少数几行的时候,用此功能。如果我们要出去很多的数据,我们就没有必要用游标了,直接db.collectionName.find(查询表达式,列);就行。

    可以取出数组中某一个位置的值,比如我们取第四个

    游标的迭代的回调函数

    游标的迭代还可以使用forEach()函数,用这种方式还可以有一个回调函数,我们通过自定义回调函数来逐个处理每个单元

    cursor.forEach(函调函数);

    例:

    //定义回调函数,回调函数有一个参数obj,这个参数,就是游标当前所指向的单元,我们可以通过obj.列名获取某一列的值。

    var gettitle=function(obj){print(obj.goods_name)}

    //声明游标

    var cursor=db.goods.find();

    //通过forEach和回调函数,依次处理数据

    cursor.forEach(gettitle);

    游标在分页中的应用

    一般地,假设每页N行,当前是page页,就需要跳过前(page-1)*N行,再取N行,在mysql中,limit(offset,N)来实现

    在mongo中,用skip(),limit()函数来实现的

    比如我们的游标取到10000行数据,而分页中,每页10行

    var mycursor=db.bar.find().skip(9995);//跳过前9995行,从9996行一直取到最后

     

    查询第901页,每页10条,

    则是var mycursor=db.bar.find().skip(900*10).limit(10);

    我们不使用游标,也可以使用skip()和limit()函数,如下图,直接去掉“var xxx= ”

     

    游标,游标,应该是会游动的,我们每调用一次.next()函数,游标就自动的游向下一个单元。从下面的例子中就可以看出,游标在不停的游动

     

  • 相关阅读:
    docker之Dockerfile实践
    使用dockerfile构建nginx镜像 转
    docker 批量删除含有同样名字的images
    redis扩展
    cocos2dx进阶学习之CCBI文件
    cocos2d-x游戏开发系列教程-超级玛丽09-怪物激活与移动
    cocos2d-x游戏开发系列教程-超级玛丽08-消息机制
    cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(六)-马里奥跳跃
    cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(五)-地图卷动
    cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(四)-马里奥平移
  • 原文地址:https://www.cnblogs.com/mrxiaohe/p/6699212.html
Copyright © 2011-2022 走看看