• MongoDB(15)- 查询操作里面的游标 cursor


    db.collection.find() 方法里面的游标

    • 该方法最后会返回一个 cursor
    • 正常情况下,访问文档必须迭代游标

    重点事项

    • 当调用 find() 函数时,Shell 并不立即查询数据库,而是等真正开始获取结果时才发送查询请求
    • 游标对象的每个方法几乎都会返回游标对象本身,这样可以方便进行链式函数的调用
    • 在 MongoDB Shell 中使用游标输出文档包含两种情况,如果不将 find() 函数返回的游标赋值给一个局部变量进行保存,在默认情况下游标会自动迭代 20 次。如果将 find() 函数返回的游标赋值给一个局部变量,则可以使用游标对象提供的函数进行手动迭代。
    • 使用清空后的游标,进行迭代输出时,显示的内容为空
    • 游标从创建到被销毁的整个过程存在的时间,被称为游标的生命周期,包括游标的创建、使用及销毁三个阶段。当客户端使用 find() 函数向服务器端发起一次查询请求时,会在服务器端创建一个游标,然后就可以使用游标函数来操作查询结果

    迭代循环游标

    直接调用变量

    var myCursor = db.users.find( { type: 2 } );
    
    myCursor

    使用 cursor 的 next() 方法

    var myCursor = db.users.find( { type: 2 } );
    
    while (myCursor.hasNext()) {
       print(tojson(myCursor.next()));
    }

    使用 printjson() 代替 print() 方法

    var myCursor = db.users.find( { type: 2 } );
    
    while (myCursor.hasNext()) {
       printjson(myCursor.next());
    }

    使用 cursor 的 forEach() 方法

    var myCursor =  db.users.find( { type: 2 } );
    
    myCursor.forEach(printjson);

    使用 pretty() 直接打印

    这不香吗,为什么要用游标还写代码,搞不懂搞不懂

    > db.inventory.find({item : /^p/}).pretty()

    常见的游标方法名

    方法名作用
    hasNext 判断是否有更多的文档
    next 用来获取下一条文档
    toArray 将查询结构放到数组中
    count 查询的结果为文档的总数量
    limit 限制查询结果返回数量
    skip 跳过指定数目的文档
    sort 对查询结果进行排序
    objsLeftlnBatch 查看当前批次剩余的未被迭代的文档数量
    addOption 为游标设置辅助选项,修改游标的默认行为
    hint 为查询强制使用指定索引
    explain 用于获取查询执行过程报告
    snapshot 对查询结果使用快照

    (后面会对常用的游标方法进行详解)

    以下三种情况会让游标被销毁

    • 客户端保存的游标变量不在作用域内。
    • 游标遍历完成后,或者客户端主动发送终止消息
    • 在服务器端 10 分钟内未对游标进行操作
  • 相关阅读:
    java一个字符串中出现次数最多的字符以及次数
    按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
    Java 替换空格
    Java中equals()和“==”区别
    ramfs和tmpfs的区别
    C语言中的nan和inf使用
    Abp中SwaggerUI的多个接口文档配置说明
    Abp中SwaggerUI的接口说明文档配置
    Abp中SwaggerUI的接口文档添加上传文件参数类型
    Abp中自定义Exception的HttpStatusCode
  • 原文地址:https://www.cnblogs.com/poloyy/p/14837849.html
Copyright © 2020-2023  润新知