【MongoDB学习笔记19】MongoDB的游标和查询选项

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

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

游标的使用实例:

1
2
3
4
5
6
7
8
9
> 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来返回前两个记录:

1
2
3
4
> 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个记录:

1
2
3
4
5
> 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指定键值排序: 

1
2
3
4
5
6
7
> 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,当然可以调整顺序得到不同的结果:

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


游标生命周期:

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

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

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

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



本文转自 bannerpei 51CTO博客,原文链接:http://blog.51cto.com/281816327/1600283,如需转载请自行联系原作者
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2月前
|
存储 NoSQL MongoDB
掌握MongoDB索引优化策略:提升查询效率的关键
在数据库性能调优中,索引是提升查询效率的利器。本文将带你深入了解MongoDB索引的内部工作原理,探讨索引对查询性能的影响,并通过实际案例指导如何针对不同的查询模式建立有效的索引。不仅将涵盖单一字段索引,还会探讨复合索引的使用,以及如何通过分析查询模式和执行计划来优化索引,最终实现查询性能的最大化。
|
2月前
|
存储 NoSQL MongoDB
MongoDB 查询分析
10月更文挑战第21天
14 1
|
2月前
|
NoSQL MongoDB 索引
MongoDB 覆盖索引查询
10月更文挑战第21天
28 1
|
2月前
|
SQL NoSQL MongoDB
MongoDB 查询文档
10月更文挑战第15天
23 1
|
2月前
|
人工智能 NoSQL 机器人
MongoDB Atlas与YoMio.AI近乎完美适配:推理更快速、查询更灵活、场景更丰富
随着MongoDB的新发布和革新,YoMio.AI的“闪电式发展”值得期待。
|
3月前
|
SQL NoSQL JavaScript
04 MongoDB各种查询操作 以及聚合操作总结
文章全面总结了MongoDB中的查询操作及聚合操作,包括基本查询、条件筛选、排序以及聚合管道的使用方法和实例。
95 0
|
4月前
|
JSON NoSQL MongoDB
MongoDB Schema设计实战指南:优化数据结构,提升查询性能与数据一致性
【8月更文挑战第24天】MongoDB是一款领先的NoSQL数据库,其灵活的文档模型突破了传统关系型数据库的限制。它允许自定义数据结构,适应多样化的数据需求。设计MongoDB的Schema时需考虑数据访问模式、一致性需求及性能因素。设计原则强调简洁性、查询优化与合理使用索引。例如,在构建博客系统时,可以通过精心设计文章和用户的集合结构来提高查询效率并确保数据一致性。正确设计能够充分发挥MongoDB的优势,实现高效的数据管理。
80 3
|
4月前
|
存储 NoSQL MongoDB
【掌握MongoDB】轻松精通MongoDB查询,从基础到高级一网打尽!
【8月更文挑战第24天】在数据驱动的时代,数据库的性能与灵活性对企业至关重要。MongoDB作为一种高性能、无模式的文档数据库,为开发者提供了灵活的数据存储方案。尤其在处理半结构化或多变数据时展现出强大优势。本文重点介绍MongoDB中的查询操作,包括基本查询、条件查询、复杂查询以及字段选择、排序和限制等功能。通过掌握这些基本查询技巧,开发者能够有效从MongoDB中检索数据,支持复杂的业务逻辑。
67 1
|
4月前
|
C# 微服务 Windows
模块化革命:揭秘WPF与微服务架构的完美融合——从单一职责原则到事件聚合器模式,构建高度解耦与可扩展的应用程序
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中借鉴微服务架构思想,实现模块化设计。通过将WPF应用分解为独立的功能模块,并利用事件聚合器实现模块间解耦通信,可以有效提升开发效率和系统可维护性。文中还提供了具体示例代码,展示了如何使用事件聚合器进行模块间通信,以及如何利用依赖注入进一步提高模块解耦程度。此方法不仅有助于简化复杂度,还能使应用更加灵活易扩展。
108 0
|
4月前
|
安全 C# 数据安全/隐私保护
WPF安全加固全攻略:从数据绑定到网络通信,多维度防范让你的应用固若金汤,抵御各类攻击
【8月更文挑战第31天】安全性是WPF应用程序开发中不可或缺的一部分。本文从技术角度探讨了WPF应用面临的多种安全威胁及防护措施。通过严格验证绑定数据、限制资源加载来源、实施基于角色的权限管理和使用加密技术保障网络通信安全,可有效提升应用安全性,增强用户信任。例如,使用HTML编码防止XSS攻击、检查资源签名确保其可信度、定义安全策略限制文件访问权限,以及采用HTTPS和加密算法保护数据传输。这些措施有助于全面保障WPF应用的安全性。
61 0