设为首页 加入收藏

TOP

MongoDB 数据库的学习与使用详解(二)
2019-09-04 01:02:49 】 浏览:96
Tags:MongoDB 数据库 学习 使用 详解
时与之前最大的区别就在于,在一个 JSON 结构里面需要定义其它的 JSON 结构,并且这种风格在日后通过程序操作的时候依然如此。


? 逻辑运算主要就是三种类型:与($and)、或($or)、非($not、$nor)。


范例:查询年龄在 19 ~ 20 岁的学生信息


? 在进行逻辑运算的时候,“and” 的连接是最容易的,因为只需要理由 “,”分隔若干个条件就可以了。


范例:查询年龄不是19岁的学生


范例:查询年龄大于 19 岁,或者成绩大于 90 分的学生信息


范例:也可以进行或的求反操作


? 针对于或的操作可以实现一个求反的功能。


? 在这几个逻辑运算之中,与的连接最简单,而或的连接需要为数据设置数组的过滤条件。


? 模的运算使用 “$mod” 来完成,语法 “ {$mod:[数字 , 余数]} ”


? 利用求模计算可以编写一些数学的计算公式。


? 只要是数据库,必须存在有 “ $in ”(在范围之中)、“ $nin ”(不在范围之中)。


范例:查询姓名是 “张三”、“李四”、“王五”的学生信息。


范例:不在范围


? 在实际的工作之中,范围的查询很重要。


? 首先在 MongoDB 里面是支持数组保存的,一旦支持了数组保存,就需要针对于数组的数据进行匹配。


范例:保存一部分数组内容


? 此时的数据包含有数组内容,而后需要针对于数组数据进行判断,可以使用几个运算符: $all、$size、$slice、$elemMatch


范例:先查看全部信息


范例:查询同时参加语文和数学课程的学生


? 现在所有显示的学生信息里面包含语文和数学的内容,而如果差一个内容的不会显示。


? 虽然 “$all” 计算可以用于数组上,但是也可以用于一个数据的匹配上。


范例:查询学生地址是 “海淀区” 的学生信息


? 既然在集合里面现在保存的是数组信息,那么数组就可以利用索引操作,使用 “key.index” 的方式来定义索引。


范例:查询数组中第二个内容(index = 1,索引下标从0)为数学的信息


范例:要求查询出只参加两门课程的学生


范例:返回年龄为 19 岁所有的学生信息,但是要求只显示两门参加课程


? 现在只取得了前两门的信息,那么也可以设置负数表示取出后两门的信息。


? 或者只是取出中间部分的信息


? 在此时设置的两个数据里面第一个数据表示跳过的数据量,而第二个数据表示返回的数量。


? 在 MongoDB 数据库里面每一个集合数据可以继续保存其它的集合数据,例如:有些学生需要保存家长信息。


范例:增加信息


? 此时给出的内容是嵌套的集合,而这种集合的数据的判断只能够通过 “ $elemMatch ” 来完成。


范例:查询出父母有人是局长的学生信息


? 由于这种查询的时候条件比较麻烦,所以如果可能,尽量别搞这么复杂的数据结构组成。


? 使用 “ $exists ” 可以判断某个字段是否存在,如果设置为 true 表示存在,如果设置为 false 就表示不存在。


范例:查询具有 parents 成员的数据


范例:查询不具有 course 成员的数据


? 可以利用此类查询来进行一些不需要的数据的过滤。


? 实际上习惯于传统关系型数据库开发的我们对于数据的筛选,可能首先想到的一定是 where 子句,所以在 MongoDB 里面也提供有 “ $where ” 。


范例:使用 where 进行数据查询


? 对于 “ $where ” 是可以简化的,但是这类的操作是属于进行每一行的信息判断,实际上对于数据量较大的情况并不方便使用。


? 实际上以上的代码严格来讲是属于编写一个操作的函数,如下所示:


? 以上只是查询了一个判断,如果要想实现多个条件的判断,那么就需要使用 and 连接。


? 虽然这种形式的操作可以实现数据查询,但是最大的缺点是将在 MongoDB 里面保存的 BSON 数据变为了 java script 的语法结构,这样的方式不方便使用数据库的索引机制,所以不建议使用。


面试题:请说明 MongoDB 中 where 的过滤有什么使用限制。


? 回答:where 能够利用 java script 查询,但是,它会把 BSON 重新变为 java script 进行循环验证,这样索引是不能起作用的。


? 如果要想实现模糊查询,那么必须使用正则表达式,而且正则表达式使用的是语言 Perl 兼容的正则表达式的形式。如果要想实现正则使用,则按照如下的定义格式:


范例:查询以 “谷” 开头的姓名


范例:查询以字母 A 开头的姓名


? 如果要执行模糊查询的操作,严格来讲只需要编写一个关键字就够了。


? 正则操作之中除了可以查询出单个字段的内容之外,也可以进行数组数据的查询。


? MongoDB 中的正则符号和之前 Java 正则是有一些小小差别,不建议使用以前的一些标记,正则就将其应用在模糊数据查询上。


? 在 MongoDB 里面数据的排序操作使用 “ sort() ” 函数,在进行排序的时候可以有两个顺序:升序(1)、降序(-1)。


范例:数据排序


? 但是在进行排序的过程里面有一种方式称为自然排序,就是按照数据保存的先后顺序排序,使用 “ $natural ” 表示。


范例:自然排序


? 在 MongoDB 数据库里面排序的操作相比较传统关系型数据库的设置要简单。


? 在 MongoDB 里面的数据分页显示也是符合于大数据要求的操作函数:


范例:分页显示(第一页,skip(0)、limit(5))


范例:分页显示(第二页,skip(5)、limit(5))


? 这两个分页的控制操作,就是在以后只要是存在有大数据的信息情况下都会使用它。


? 对于 MongoDB 而言,数据的更新基本上是一件很麻烦的事情,如果在实际的工作之中,真的具有此类的操作支持,那么最好的做法,在 MongoDB 里面对于数据的更新操作提供了两类函数:save()、update() 。


? 如果要修改数据最直接的使用函数就是 update() 函数,但是这个函数的语法要求很麻烦。


范例:更新存在的数据 —— 将年龄是 19 岁的人的成绩都更新为 100 分(此时会返回多条数据)


? "$set" 在 MongoDB 中叫修改器,现在只是修改数据用,但是严格来讲,不光内容可以修改,连集合结构也可以修改,因为它是无模式的。


范例:更新不存在的数据


? 由于没有年龄是 30 岁的学生信息,所以此时相当于进行了数据的创建。


? 那么除了 update() 函数之外,还提供有一个 save() 函数,这个函数的功能与更新不存在的内容相似。


范例:使用 save() 操作(尽量不用)


? 由于此时对应的 id 数据存在了,所以就变为了更新操作,但是如果要保存的数据不存在(不能保存有 “ _id ” 的内容),那么就变为了增加操作。


? 对 MongoDB 数据库而言,数据的修改会牵扯到内容的变更、结构的变更(包含有数组),所以在进行 MOngoDB 设计的时候就提供有一系列的修改器的应用,那么像之前使用的 “ $set ” 就是一个修改器。


1、$inc:主要针对于一个数字字段,增加某个数字字段的数据内容:


范例:将所有年龄为 19 岁的学生成绩一律减少 30 分,年龄增加 1 岁。


2、$set:进行内容的重新设置:


范例:将年龄是 20 岁的人的成绩修改为 89 分


3、$unset:删除某个成员的内容:


范例:删除 “张三” 的年龄与成绩信息


? 执行之后指定的成员的内容就消失了。


4、$push:相当于将内容追加到指定的成员之中(基本上是数组)


范例:向 “李四” 添加课程信息


范例:向 “张三” 添加课程信息(此时张三信息下??有 course 信息)


范例:向 "谷大神 - E" 里面的课程追加一个 “美术”


? 查询结果显示添加成功,所以,"$push" 就是进行数组数据的添

首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Oracle 误删除表的几种恢复方法 下一篇ORA-01157与ORA-01110无法识别/锁..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目