• MongoDB学习笔记-游标


    理解MongoDB的游标有两种维度:客户端和服务器端。下面将从这两方面来说明。

    客户端

    find方法返回值是一个游标。可以通过游标来对最终结果进行控制。比如限制结果数量,略过某一部分,根据任意键按任意顺序的组合对结果进行各种排序等。

    创建游标

    创建一个游标非常简单,用一个局部变量接收结果集就可以了。

    var cursor=db.collection.find();

    迭代

    要迭代结果可以使用游标的next方法。也可以使用hasNext来查看结果中是否还有下一个记录(这里和C#集合很像)。

    var obj;

    while(cursor.hasNext()){

        obj=cursor.next()

        //do stuff

    }

    游标还实现了Javascript的迭代器接口,所以可以在foreach循环中使用(好熟悉):

    cursor.forEach(function(x){

        print(x.name)

    })

    在调用find时,MongoDB shell并不立即查询数据库,而是在等待真正开始获取数据时才发送查询。(类似Linq中IQueryable)。例如执行下面操作:

    cursor.hasNext();

    这时,查询才会发往服务器。shell立刻获取前100个结果或前4MB数据,这样下次再调用hasNext或next时就不必再连接服务器取结果了。当客户端用完第一次取得的结果时,shell会再一次连接服务器,返回下一次结果。如果继续执行next或hasNext方法的话就会一直获取直到把集合遍历尽为止。

    服务器端

    游标生命周期

    游标会消耗一定的内存和资源,一般游标遍历完以后,或客户端发来终止消息是,MongoDB会释放这些资源供其他地方使用。所以要尽量保证尽快地释放游标。

    如果一个游标已经不再作用域内或超出10分没有被使用的话,客户端就会向服务器发送一条特殊的消息,来告诉服务器销毁游标。这样的话大大减少了服务器的负担,MongoDB不用维护成千上万个打开却不使用的游标了。

    有时这种“超时销毁”行为是我们希望的。然而,有时我们希望延长游标的持续时间。若是如此的话,可以使用immortal函数来实现延长游标持续时间。这时要注意,一定要在迭代完结果时,主动销毁游标,以确保游标被关闭。否则的话它会一直消耗服务器资源。

  • 相关阅读:
    redis介绍以及安装
    解决Django Rest Framework中的跨域问题
    DRF之解析器组件及序列化组件
    DRF之REST规范介绍及View请求流程分析
    Vue汇总(搬砖)
    Django的Serializers的使用
    模板自定义标签和过滤器
    sencha touch 2.3.1 list emptyText不显示
    Cordova 3.3 开发环境搭建(视频)
    sencha touch 开发环境搭建(视频)
  • 原文地址:https://www.cnblogs.com/Khadron/p/5474747.html
Copyright © 2020-2023  润新知