热点
测试架构师闭环思维精修创业逻辑,驱动效率跃升,reasoning_content:我们要求以测试架构师的口吻,写一个与技术、科技相关的标题,主题是点评精修创业逻辑,闭环思维驱动效率跃升式增长需要简短精炼,30字以内直接输出标题,不要加说明nn思考:测试架构师的口吻,可能涉及技术测试、架构、质量、闭环、效率等标题要体现技术性、创业逻辑、闭环思维、效率跃升可以结合测试架构、闭环、增长等关键词例如:闭环思维驱动测试架构,创业逻辑精修效率跃升 但可能稍长更简洁:测试架构闭环思维,精修创业逻辑驱动效率跃升 27字或者:闭环思维精修创业逻辑,测试架构驱动效率跃升 ?还可以考虑技术闭环驱动创业逻辑精修,测试架构效率跃升 等nn建议直接输出:测试架构师视角:闭环思维精修创业逻辑,驱动效率跃升式增长但可能超30字数一下:测试架构师视角:闭环思维精修创业逻辑,驱动效率跃升式增长 共22字?注意标点不算实际上测试架构师视角:算7个字符?通常中文字算字数最好不用冒号试试:闭环思维精修创业逻辑 测试架构驱动效率跃升 16字?闭环思维精修创业逻辑 9字,测试架构驱动效率跃升 8字,共17字可以nn更贴合点评精修中的点评可能指测试中的审批评审?但主题是点评精修创业逻辑,可能是指通过测试架构师的视角来点评和精修创业逻辑所以标题可以体现测试架构师点评nn最终测试架构师点评:闭环思维精修创业逻辑,驱动效率跃升 共20字?测试架构师点评:6字,闭环思维精修创业逻辑9字,驱动效率跃升5字,加逗号共21字可以nn或者更简洁:闭环思维精修创业逻辑 测试架构驱动效率跃升 17字我觉得这个不错nn考虑到要求以测试架构师的口吻,但标题中不一定非要出现测试架构师这个词,只要语境符合即可为了明确,还是带上最终输出:测试架构师闭环思维:精修创业逻辑,驱动效率跃升 共18字或者测试架构师闭环思维精修创业逻辑,驱动效率跃升式增长 可能超了nn测试架构师闭环思维,精修创业逻辑驱动效率跃升 18字好nn我选择:测试架构师闭环思维精修创业逻辑,驱动效率跃升 共17字注意跃升后面没有式增长,但主题中有跃升式增长,为了简洁可以省略式增长nn直接输出
15 9 月 2026, 周二

掌握MongoDB游标的使用的方法

MongoDB中的游标与关系型数据库中的游标在功能上大同小异。游标相当于C语言的指针,可以定位到某条记录,在MongoDB中,则是文档。因此在mongoDB中游标也有定义,声明, 打开,读取,关闭这么个过程。客户端通过游标,能够实现对最终结果进行有效的控制,诸如限制结果数量,跳过部分结果或根据任意键按任意顺序的组合对结果进行各种排序等。

通俗的说,游标不是查询结果,可以理解为数据在遍历过程中的内部指针,其返回的是一个资源,或者说数据读取接口.
客户端通过对游标进行一些设置就能对查询结果进行有效地控制,如可以限制查询得到的结果数量、跳过部分结果、或对结果集按任意键进行排序等!
直接对一个集合调用find()方法时,我们会发现,如果查询结果超过二十条,只会返回二十条的结果,这是因为Mongodb会自动递归find() 返回的游标。

下文是针对MongoDB游标的具体介绍。

一、mongoDB游标介绍

db.collection.find()方法返回一个游标,对于文档的访问,我们需要进行游标迭代
mongoDB的游标与关系型数据库SQL中的游标类似,可以通过对游标进行(如限制查询结果数,跳过的结果数等)设置来控制查询结果
游标会消耗内存和相关系统资源,游标使用完后应尽快释放资源
在mongo shell中,如果返回的游标结果集未指定给某个var定义的变量,则,游标自动迭代20次,即输出前20个文档,超出20的情形则需要输入it来翻页
本文内容描述手动方式来实现游标迭代来访问文档或者是用索引迭代

    声明游标
           var cursor =  db.collectioName.find(query,projection);

    打开游标
            Cursor.hasNext() 判断游标是否已经取到尽头

    读取数据
            Cursor.Next()    取出游标的下一个文档

    关闭游标
            cursor.close()   此步骤可省略,通常为自动关闭,也可以显示关闭

用while循环来遍历游标示例
 var mycursor = db.bar.find({_id:{$lte:5}})
 while(mycursor.hasNext()) {
  printjson(mycursor.next());
  }
    游标生命周期
            a、游标完成匹配结果的迭代后,它会清除自身;
            b、客户端的游标已经不在作用域内,驱动程序回向服务器发送一条特别的消息,让其销毁;
            c、缺省情况下,游标在十分钟内没有使用,游标自动关闭或者客户端已经迭代完整个游标;
            d、可以通过cursor.noCursorTimeout()来定义游标超时时间
                    如:var myCursor = db.users.find().noCursorTimeout() 

           e、对于自定义超时时长的游标可以使用cursor.close() 来关闭游标
                    如:db.collection.find(<query>).close()

二、当前环境及数据准备

 repSetTest:PRIMARY> db.version()
 3.0.12
 //创建包含29个文档的集合user
 repSetTest:PRIMARY> for (var i=1;i<30;i++){
 … db.user.insert({"id":i,"ename":"usr"+i});
 … }
 WriteResult({ "nInserted" : 1 })
 repSetTest:PRIMARY> db.user.count()
 29

 //查询集合user上所有文档
 repSetTest:PRIMARY> db.user.find()
 { "_id" : ObjectId("5804d07fd974b32430ea9748"), "id" : 1, "ename" : "usr1" }
 { "_id" : ObjectId("5804d07fd974b32430ea9749"), "id" : 2, "ename" : "usr2" }
 ………………………..
 { "_id" : ObjectId("5804d07fd974b32430ea975b"), "id" : 20, "ename" : "usr20" }
 Type "it" for more //上面的结果只输出了20行,这个提示表明查看更多应输入it

 repSetTest:PRIMARY> it
 { "_id" : ObjectId("5804d07fd974b32430ea975c"), "id" : 21, "ename" : "usr21" }
 …………..
 { "_id" : ObjectId("5804d07fd974b32430ea9764"), "id" : 29, "ename" : "usr29" }
 
二、使用print输出游标结果集

 repSetTest:PRIMARY> var myCursor = db.user.find()
 while (myCursor.hasNext()) {
 print(tojson(myCursor.next()))
 }

 { "_id" : ObjectId("5804d07fd974b32430ea9748"), "id" : 1, "ename" : "usr1" }
 ……….
 {
 "_id" : ObjectId("5804d07fd974b32430ea9751"),
 "id" : 10,
 "ename" : "usr10"
 }
 …………….
 {
 "_id" : ObjectId("5804d07fd974b32430ea9764"),
 "id" : 29,
 "ename" : "usr29"
 }
 //上述查询中通过var myCursor进行变量的定义,相当于SQL中的declare cursor cur_name is select ..
 //变量 myCursor定义仅仅是定义,并不会访问数据库,而是在myCursor.hasNext()真正访问数据库
 //myCursor.next()则是输出下一条记录,hasNext()访问数据库时会根据缺省游标设定将结果读取到本地
 
三、使用printjsont输出游标结果集

 repSetTest:PRIMARY> var myCursor = db.user.find({id:{$gt:20}})
 while (myCursor.hasNext()) {
 printjson(myCursor.next());}
 {
 "_id" : ObjectId("5804d07fd974b32430ea975c"),
 "id" : 21,
 "ename" : "usr21"
 }
 …….
 {
 "_id" : ObjectId("5804d07fd974b32430ea9764"),
 "id" : 29,
 "ename" : "usr29"
 }

dawei

【声明】:商丘站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

您错过了

测试架构师闭环思维精修创业逻辑,驱动效率跃升,reasoning_content:我们要求以测试架构师的口吻,写一个与技术、科技相关的标题,主题是点评精修创业逻辑,闭环思维驱动效率跃升式增长需要简短精炼,30字以内直接输出标题,不要加说明nn思考:测试架构师的口吻,可能涉及技术测试、架构、质量、闭环、效率等标题要体现技术性、创业逻辑、闭环思维、效率跃升可以结合测试架构、闭环、增长等关键词例如:闭环思维驱动测试架构,创业逻辑精修效率跃升 但可能稍长更简洁:测试架构闭环思维,精修创业逻辑驱动效率跃升 27字或者:闭环思维精修创业逻辑,测试架构驱动效率跃升 ?还可以考虑技术闭环驱动创业逻辑精修,测试架构效率跃升 等nn建议直接输出:测试架构师视角:闭环思维精修创业逻辑,驱动效率跃升式增长但可能超30字数一下:测试架构师视角:闭环思维精修创业逻辑,驱动效率跃升式增长 共22字?注意标点不算实际上测试架构师视角:算7个字符?通常中文字算字数最好不用冒号试试:闭环思维精修创业逻辑 测试架构驱动效率跃升 16字?闭环思维精修创业逻辑 9字,测试架构驱动效率跃升 8字,共17字可以nn更贴合点评精修中的点评可能指测试中的审批评审?但主题是点评精修创业逻辑,可能是指通过测试架构师的视角来点评和精修创业逻辑所以标题可以体现测试架构师点评nn最终测试架构师点评:闭环思维精修创业逻辑,驱动效率跃升 共20字?测试架构师点评:6字,闭环思维精修创业逻辑9字,驱动效率跃升5字,加逗号共21字可以nn或者更简洁:闭环思维精修创业逻辑 测试架构驱动效率跃升 17字我觉得这个不错nn考虑到要求以测试架构师的口吻,但标题中不一定非要出现测试架构师这个词,只要语境符合即可为了明确,还是带上最终输出:测试架构师闭环思维:精修创业逻辑,驱动效率跃升 共18字或者测试架构师闭环思维精修创业逻辑,驱动效率跃升式增长 可能超了nn测试架构师闭环思维,精修创业逻辑驱动效率跃升 18字好nn我选择:测试架构师闭环思维精修创业逻辑,驱动效率跃升 共17字注意跃升后面没有式增长,但主题中有跃升式增长,为了简洁可以省略式增长nn直接输出