设为首页 收藏本站
查看: 1481|回复: 0

[经验分享] MongoDB笔记(三)

[复制链接]

尚未签到

发表于 2018-10-25 08:37:20 | 显示全部楼层 |阅读模式
  一、MongoDB数据查询
  (1)MongoDB使用find函数来数据查询,其功能与SQL中的select函数相同,可以提供与关系型数据库类似的许多功能,包括映射、排序等。
  db.集合名.find(query,fields,limit,skip)
  1.query相当于SQL中的where语句
  2.fields用于字段映射,1的时候表示显示0是不显示,语法格式:{field:0}或{field:1}用时候要么全用0要么全用1,混合使用的话除了"_id":0 以外的混合用法是错误的。
  3.limit 限制查询结果集的文档数量。
  4.skip跳过一定数据量的结果,设置第一条返回文档的偏移量。
  (2)MongoDB与注意事项
  1.MongoDB不支持多集合间的连接查询,find函数一次查询只能针对一个集合。
  2.find参数为空或者查询条件为空文档时,会返回集合中所以的文档。
  3.除了将limit和skip作为find函数的参数外,还可以单独使用limit和skip函数来修饰查询结果。
  例如:db.student.find({age:{$lt:22}}).limit(5).skip(10)
  4.返回的查询结果集默认是无序的,如果需要对结果进行排序,可以使用sort函数。1表示升序-1为降序。
  例如:db.student.find().sort({name:1,age:-1})
  5.db.collection.findOne()只会返回第一条数据。
  6.当查询的集合文档数量很大时,为了加快数据的查询速度可以创建索引。
  7.除了使用find函数实现基本查询之外,MongoDB还提供了聚合框架,用于复杂查询。
  二、查询操作符介绍及使用
  (1)比较查询操作符
DSC0000.jpg

  (2)逻辑查询操作符
  逻辑查询操作符,可连接多个查询条件,用于逻辑与、或、非以及取反操作。
DSC0001.jpg

  (3)元素操作符
  元素查询操作符,用来查询文档中字段的属性,包括字段是否存在以及字段的数据类型。
DSC0002.jpg

  三、MogoDB的游标
  使用find函数进行查询时,MongoDB并不是一次返回结果集中的所有文档,而是分批次的返回结果,返回的数据量不会多余4M,默认情况下会返回结果集的101个文档或者1M的数据(看哪个条件先满足就用谁)。返回的文档会缓存到内存中,同时会有一个cursor游标指向该批结果集中的第一个,当游标遍历到完最后一个文档时,游标将自动向MongoDB数据库发送一个getMore数据请求得到下一批的结果集。
DSC0003.jpg

  (1)使用游标时要注意下面几个问题。
  1.当调用find函数时,shell并不立即查询数据库,而是等真正开始游标的hasNext使用时(获取结果时)才发送查询请求。
  2.游标对象的每个方法几乎都返回游标对象本身,这样就可以方便的进行链式函数调用。
  3.如果不将find函数返回的游标赋值给一个局部变量进行保存的话,默认情况下游标会自动迭代20次。想要手动迭代就必须赋值给一个局部变量,然后用提供的函数进行迭代。
  (2)游标的生命周期(创建、使用以及销毁)
  当客户端使用find函数向服务器端发起一次查询请求时,会在服务器端创建一个游标,然后就可以使用游标函数来操作查询结果。
  下面三种情况会让游标销毁:
  1.游标遍历完成后,或者客户端主动发送终止消息。
  2.客户端保存的游标变量不在作用域内。
  3.在服务器端10分钟内未对游标进行操作。
  (3)游标快照
  游标因为没有隔离性,所以游标可能会返回那些由于体积变大而被移动到集合末尾的文档。为解决这一问题的方法是对查询进行快照。其语法如下:
  db.collection.find().snapshot()
  使用快照后,查询就会在_id索引上来遍历执行,这样就可以保证每个文档只会被返回一次,从而保证获取结果的一致性。但快照会使得查询速度变慢,使用需谨慎。
  四、findAndModify函数的使用
DSC0004.jpg

  findAndModify与update函数的比较:
  1.都以原子的方式来更新修改文档
  2.当多个文档满足query条件时:
  ①findAndModify使用sort选项,对结果排序,选择第几个文档。
  ②update不能选择具体更新哪一个文档。
  3.update可以一次修改多个文档,findAndModify不行。
  4.update可以设置写的安全级别findAndModify不行。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626137-1-1.html 上篇帖子: MongoDB笔记(二) 下篇帖子: MongoDB主从
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表