MongoDB笔记(三)

一,MongoDB数据查询

,,,, (1) MongoDB使用找到函数来数据查询,其功能与SQL中的选择函数相同,可以提供与关系型数据库类似的许多功能,包括映射,排序等。

,,,, db。集合名;(查询、字段限制,跳过)

,,,, 1。查询相当于SQL中的地方语句

,,, 2。字段用于字段映射1的时候表示显示0是不显示,语法格式:{字段:0}或{:1}用时候要么全用0要么全用1,混合使用的话除了“_id”: 0以外的混合用法是错误的。

,,, 3。限制限制查询结果集的文档数量。

,,, 4。跳过跳过一定数据量的结果,设置第一条返回文档的偏移量。

,,,, (2) MongoDB与注意事项

,,,, 1。MongoDB不支持多集合间的连接查询,找到函数一次查询只能针对一个集合。

,,, 2。找到参数为空或者查询条件为空文档时,会返回集合中所以的文档。

,,, 3。除了将限制和跳过作为找到函数的参数外,还可以单独使用限制和跳过函数来修饰查询结果。

,,例如:db.student.find({年龄:{$ lt: 22}}) .limit (5) .skip (10)

,,, 4。返回的查询结果集默认是无序的,如果需要对结果进行排序,可以使用某种函数。1表示升序1为降序。

,,,,例如:db.student.find () .sort({名称:1,年龄:1})

,,,, 5. db.collection.findone()只会返回第一条数据。

,,6 .当查询的集合文档数量很大时,为了加快数据的查询速度可以创建索引。

,,, 7。除了使用找到函数实现基本查询之外,MongoDB还提供了聚合框架,用于复杂查询。


二,查询操作符介绍及使用

,,,,(1)比较查询操作符

 MongoDB笔记(三)

,,,,(2)逻辑查询操作符

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

 MongoDB笔记(三)

,,,,(3)元素操作符

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

 MongoDB笔记(三)


三,MogoDB的游标

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

 MongoDB笔记(三)

,,,,(1)使用游标时要注意下面几个问题。

,,,, 1。当调用找到函数时,shell并不立即查询数据库,而是等真正开始游标的hasNext使用时(获取结果时)才发送查询请求。

,,, 2。游标对象的每个方法几乎都返回游标对象本身,这样就可以方便的进行链式函数调用。

,,, 3。如果不将找到函数返回的游标赋值给一个局部变量进行保存的话,默认情况下游标会自动迭代20次。想要手动迭代就必须赋值给一个局部变量,然后用提供的函数进行迭代。

,,,,(2)游标的生命周期(创建,使用以及销毁)

,,,,当客户端使用找到函数向服务器端发起一次查询请求时,会在服务器端创建一个游标,然后就可以使用游标函数来操作查询结果。

,,,,下面三种情况会让游标销毁:

,,,, 1。游标遍历完成后,或者客户端主动发送终止消息。

,,, 2。客户端保存的游标变量不在作用域内。

,,, 3。在服务器端10分钟内未对游标进行操作。

,,,,(3)游标快照

,,,,游标因为没有隔离性,所以游标可能会返回那些由于体积变大而被移动到集合末尾的文档。为解决这一问题的方法是对查询进行快照。其语法如下:

,,,, db.collection.find () .snapshot ()

,,,,使用快照后,查询就会在_id索引上来遍历执行,这样就可以保证每个文档只会被返回一次,从而保证获取结果的一致性。但快照会使得查询速度变慢,使用需谨慎。


四,findAndModify函数的使用

 MongoDB笔记(三)

MongoDB笔记(三)