MongoDB笔记(三)
admin
2023-01-19 07:01:19
0

一、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)比较查询操作符

MongoDB笔记(三)

    (2)逻辑查询操作符

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

MongoDB笔记(三)

    (3)元素操作符

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

MongoDB笔记(三)


三、MogoDB的游标

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

MongoDB笔记(三)

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

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

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

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

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

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

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

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

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

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

    (3)游标快照

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

    db.collection.find().snapshot()

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


四、findAndModify函数的使用

MongoDB笔记(三)

    findAndModify与update函数的比较:

    1.都以原子的方式来更新修改文档

    2.当多个文档满足query条件时:

    ①findAndModify使用sort选项,对结果排序,选择第几个文档。

    ②update不能选择具体更新哪一个文档。

    3.update可以一次修改多个文档,findAndModify不行。

    4.update可以设置写的安全级别findAndModify不行。

相关内容

热门资讯

玩家分享攻略“三鑫联盟.有挂吗... 家人们!今天小编来为大家解答三鑫联盟透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里买很...
【第一财经】“推大石28杠.到... 网上科普关于“推大石28杠有没有挂”话题很是火热,小编也是针对推大石28杠作*弊开挂的方法以及开挂对...
【今日要闻】“红黑大战.到底是... 家人们!今天小编来为大家解答红黑大战透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买很...
【第一资讯】“小乐红中麻将.真... 您好:小乐红中麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款...
玩家分享攻略“麻友圈2贵阳捉鸡... 有 亲,根据资深记者爆料麻友圈2贵阳捉鸡是可以开挂的,确实有挂(咨询软件...
玩家攻略科普“全民牛牛.辅助开... 有 亲,根据资深记者爆料全民牛牛是可以开挂的,确实有挂(咨询软件无需打开...
我来教教您“新青鸟大厅拼三张.... 家人们!今天小编来为大家解答新青鸟大厅拼三张透视挂怎么安装这个问题咨询软件客服徽9752949的挂在...
【今日要闻】“官方正版炸金花.... 【今日要闻】“官方正版炸金花.到底有挂吗?”太坑了原来有挂您好,官方正版炸金花这个游戏其实有挂的,确...
今日重磅消息“昆明文山麻将.开... 家人们!今天小编来为大家解答昆明文山麻将透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里...
今日重大消息“闲来贵州麻将.辅... 今日重大消息“闲来贵州麻将.辅助器?”必胜开挂神器您好,闲来贵州麻将这个游戏其实有挂的,确实是有挂的...