【MongoDB学习笔记19】MongoDB的游标和查询选项
admin
2023-04-12 10:43:28
0

MongoDB使用游标来处理find查询到的结果文档集;

游标的使用实例:

> var cursor=db.post.find({"name.firstname":"joe"})   
> cursor    
{ "_id" : ObjectId("54ace1394ba07ed75df68f90"), "name" : { "firstname" : "joe", "lastname" : "schome" }, "age" : 28 }    
{ "_id" : ObjectId("54ace753eab1d0ba4abb48ab"), "name" : { "firstname" : "joe", "lastname" : "schome" }, "age" : 30 }    
{ "_id" : ObjectId("54ace777eab1d0ba4abb48ac"), "name" : { "firstname" : "joe", "lastname" : "schome", "comment" : 10 }, "age" : 30 }    
{ "_id" : ObjectId("54ace781eab1d0ba4abb48ad"), "name" : { "firstname" : "joe", "lastname" : "schome", "comment" : 6 }, "age" : 30 }    
{ "_id" : ObjectId("54ace785eab1d0ba4abb48ae"), "name" : { "firstname" : "joe", "lastname" : "schome", "comment" : 5 }, "age" : 30 }    
{ "_id" : ObjectId("54ace789eab1d0ba4abb48af"), "name" : { "firstname" : "joe", "lastname" : "schome", "comment" : 7 }, "age" : 30 }    
>

使用limit来返回前两个记录:

> cursor.limit(2)   
{ "_id" : ObjectId("54ace1394ba07ed75df68f90"), "name" : { "firstname" : "joe", "lastname" : "schome" }, "age" : 28 }    
{ "_id" : ObjectId("54ace753eab1d0ba4abb48ab"), "name" : { "firstname" : "joe", "lastname" : "schome" }, "age" : 30 }    
>

或者使用skip来跳过前3个记录:

> cursor.skip(3)   
{ "_id" : ObjectId("54ace781eab1d0ba4abb48ad"), "name" : { "firstname" : "joe", "lastname" : "schome", "comment" : 6 }, "age" : 30 }    
{ "_id" : ObjectId("54ace785eab1d0ba4abb48ae"), "name" : { "firstname" : "joe", "lastname" : "schome", "comment" : 5 }, "age" : 30 }    
{"_id" : ObjectId("54ace789eab1d0ba4abb48af"), "name" : { "firstname" : "joe", "lastname" : "schome", "comment" : 7 }, "age" : 30 }    
 >

或者使用sort指定键值排序: 

> cursor.sort({"age":1})    
{ "_id" : ObjectId("54ace1394ba07ed75df68f90"), "name" : { "firstname" : "joe", "lastname" : "schome" }, "age" : 28 }    
{ "_id" : ObjectId("54ace753eab1d0ba4abb48ab"), "name" : { "firstname" : "joe", "lastname" : "schome" }, "age" : 30 }    
{ "_id" : ObjectId("54ace777eab1d0ba4abb48ac"), "name" : { "firstname" : "joe", "lastname" : "schome", "comment" : 10 }, "age" : 30 }    
{ "_id" : ObjectId("54ace781eab1d0ba4abb48ad"), "name" : { "firstname" : "joe", "lastname" : "schome", "comment" : 6 }, "age" : 30 }    
{ "_id" : ObjectId("54ace785eab1d0ba4abb48ae"), "name" : { "firstname" : "joe", "lastname" : "schome", "comment" : 5 }, "age" : 30 }    
{ "_id" : ObjectId("54ace789eab1d0ba4abb48af"), "name" : { "firstname" : "joe", "lastname" : "schome", "comment" : 7 }, "age" : 30 }


综合使用sort/limit/skip,当然可以调整顺序得到不同的结果:

> cursor.sort({"name.comment":1}).skip(2).limit(1)
{ "_id" : ObjectId("54ace785eab1d0ba4abb48ae"), "name" : { "firstname" : "joe", "lastname" : "schome", "comment" : 5 }, "age" : 30 }
>


游标生命周期:

游标会消耗内存和其他资源,游标使用完后会释放资源以供数据库它用;游标会在以下情况终止,

(1)游标完成匹配结果的迭代后,它会清楚自身;

(2)客户端的游标已经不再作用域内,驱动程序回向服务器发送一条特别的消息,让其销毁;

(3)游标在十分钟内没有使用,游标自动销毁;



相关内容

热门资讯

外交部:中方反对美国向中国台湾... 新华社北京5月12日电(记者万倩仪、冯歆然)外交部发言人郭嘉昆12日在例行记者会上就中美关系和台湾问...
外交部:亚太各国应擦亮眼睛,共... 新华社北京5月12日电(记者董雪、孙楠)外交部发言人郭嘉昆5月12日在例行记者会上回答相关问题时表示...
坚定不移沿着习近平总书记指引的... 吴敏杰(右一)和陈萍(左一),由班车结缘。湖北日报全媒记者 张诗秋 摄淅川到柴湖的班车。李栀子 卢晋...
热搜爆了!腾讯张军: 不会开发... 5月11日晚,“微信状态 访客记录”爆上热搜第一。 今天(5月12日),微信员工@客村小蒋发文回应:...
“人工胚胎”,首次进入太空! 来源:市场资讯 (来源:环球网资讯) 来源:央视新闻微信公众号 11日,我国天舟十号成功发射。“人工...
巨婴孙杨,屡教不改 内娱,终于等来了自己的综艺鬼才。体育冠军孙杨,人送外号“高需求宝宝”;艺术体操运动员张豆豆,被网友戏...
微纳米七级分散乳化机选型指南:... 导语:在医药制剂、化工新材料、食品加工等行业中,微纳米级分散乳化机的性能直接影响产品稳定性与生产效率...
全国率先!湖北人形机器人开始登... 当前,我国人形机器人产业爆发,各品牌机器人层出不穷。然而,不同品牌机器人由于技术路径不同,采用的零部...
国标出台,人工智能终端分级工作... 人工智能终端是人工智能技术规模化落地、体系化发展的关键载体。近年来,我国人工智能产业蓬勃发展,人工智...
OPPO「母亲节」交学费,另一... 「核心提示」 母亲节文案翻车背后:OPPO的营销,为何总在“雷区”蹦迪? 作者 | 李白 编...