加操作使用的,如果没有数组则进行一个新的数组的创建,如果有则进行内容的追加。
5、$pushAll :与 “$push” 是类似的,可以一次追加多个内容到数组里面
范例:向 “王五” 是信息里面添加多个课程内容
6、$addToSet :向数组里面增加一个新的内容,只有在这个内容不存在的时候才会增加
范例:向 王五 的信息增加新的内容
? 此时会判断要增加的内容在数组里面是否已经存在了,如果不存在则向数组之中追加内容,如果存在则不做任何的修改操作。
7、$pop:删除数组内的数据
范例:删除王五的第一个课程
范例:删除王五的最后一个课程
? 结果显示就把最后一个数组给删掉了。
8、$pull:从数组内删除一个指定内容的数据
范例:删除王五的美术(不存在的)课程
范例:删除王五的音乐(存在的)课程
9、$pullAll:一次性删除多个内容
范例:删除 "谷大神 - A" 中三门课程
10、$rename:为成员名称重命名
范例:将 “张三” 的 name 成员名称修改为 “姓名”
? 在整个 MongoDB 数据库里面,提供的修改器的支持很到位。
? 在 MOngoDB 里面数据的删除实际上并不复杂,只需要使用 “remove()” 函数就可以了。
? 但是在这个函数中有两个可选项:
? 1、删除条件:满足条件的数据被删除;
? 2、是否只删除一个数据,如果设置为 true 或者是 1 表示只删除一个。
范例:清空 infos 集合中的内容
范例:删除所有姓名里面带有 “谷” 的信息,默认情况下全部删除。
范例:删除姓名带有 “高” 的信息,要求只删除一个
? 删除操作里面依然需要使用限定查询的相关操作内容。
? 所谓的游标就是指的数据可以一行行的进行操作,非常类似于 ResultSet 数据处理。在 MongoDB 数据库里面对游标的控制非常的简单,只需要使用 find() 函数就可以返回游标了。对于返回的游标如果要想进行操作,使用两个函数:
? 以上是游标的操作形式,但是实际上不可能这么去用,因为必须利用循环才能够输出内容。
范例:编写具体的操作代码
? 相当于每一个数据都单独拿出来进行逐行的控制。
? 当游标数据取出来之后,实际上每行数据返回的都是一个 Object 型的内容,那么如果需要将数据按照 json 的形式出现,则可以使用 printjson() 函数完成。
? 在所有已知的数据库里,只有 MongoDB 的游标操作是最简单、最直观的。
? 在任何的数据库之中,索引都是一种提升数据库检索性能的手段,这一点在 MOngoDB 数据库之中是同样存在的,在 MongoDB 数据库里面依然会存在有两种索引创建:一种是自动创建,另外一种是手工创建。
范例:重新准备一个新的简单集合
? 此时在 students 集合上并没有去设置任何的索引,那么下面通过 getIndexes() 函数来观察在 students 集合里面已经存在的索引内容。
范例:查询默认状态下的 students 集合的索引内容
? 现在发现会存在有一个 “_id” 列的索引内容。但是如果要想创建自己的索引,则可以使用下面的语法完成:
范例:创建一个索引,在 age 字段上设置一个降序索引
? 此时并没有设置索引的名字,所以名字是自动命名的。命名规范:“字段名称_索引的排序模式”,如:"age_-1"。
范例:针对于当前的 age 字段上的索引做一个分析
? 此时的查询使用了索引的技术,但是下面再来观察一个查询,不使用索引字段。
范例:针对于 score 字段上设置查询
? 此时在 score 字段上并没有设置索引,所以当前的索引形式就变成了全集合扫描的模式。
? 但是如果说,现在换一种形式,年龄和成绩一起执行判断查询会出现什么样的结果?
? 这个时候虽然 age 字段上存在有索引,但是一个明显的问题是,由于 score 字段上没有索引,所以依然是使用的是全表扫描操作,那么为了解决此时的问题,可以使用一个复合索引。
范例:默认使用索引
? 但是如果换到了条件之中:
? 现在发现并没有使用索引,所以这个时候看能否强制使用一次索引。hint() 函数为强制使用索引操作。
范例:强制使用索引
? 如果正常来讲,这个代码根本就不可能调用默认的索引执行,但是我们觉得不好,所以需要使用 hint() 函数来强制 MongoDB ,告诉你必须使用一次索引,由于此时在 age 和 score 两个字段上已经设置了复合索引,那么现在使用的就是默认的复合索引。
? 但是如果在一个集合里面设置了过多的索引,实际上会导致性能下降,那么就可以删除索引。
范例:删除一个索引
? 可是如果只是一个一个删除索引也会很麻烦,所以提供有删除全部索引的操作。
范例:删除全部索引
? 所谓的删除全部索引指的就是非 “_id” 的索引,也就是所有的自定义索引。
? 索引不应该太多,而且不应该在频繁更新的数据上设置索引,这样反而会降低性能。所以索引的操作一般要经过测试和分析之后才能决定是否去使用索引。
? 数据量大概在几万几十万条使用意义不大,在几百万几千万条数据中使用索引意义更明显。
? 唯一索引的主要目的是用在某一个字段上,使该字段的内容不重复。
范例:创建唯一索引
? 表示在 name 字段上的内容绝对不允许重复。
? 添加只有 name 一样的数据:
? 此时除了 name 字段上的内容之外,发现所有的数据都不一样,但是由于在 name 字段上设置了唯一索引,所以整个的程序里面如果增加了重复内容,那么会出现以下的错误提示信息:
? 唯一索引能够保证指定字段上的数据不重复。
? 在一些程序站点会出现若干秒之后信息被删除的情况,例如:手机信息验证码,那么在 MongoDB 里面就可以轻松的实现过期索引,但是这个时间往往不怎么准确。
范例:设置过期索引
? 设置索引在10秒后过期
范例:在一个 phones 集合里面设置过期索引
? 如果要想实现过期索引,需要保存一个时间信息:
? 等到10秒以后(永远不会那么准确)所保存的数据就会消失。这样的特性在进行一些临时数据保存的时候非常有帮助,最早如果没有 MongoDB 这种特性,而只是使用最简单的关系型数据库开发,那么是非常麻烦的。
? 在一些信息管理平台上经常需要进行信息模糊查询,最早的时候是利用了某个字段上实现的模糊查询,但是这个时候返回的信息并不会很准确,因为只能够查 A 字段或者是 B 字段,而在 MongoDB 里面实现了非常简单的全文检索。
范例:定义一个新的集合
范例:设置全文检索
范例:实现数据的模糊查询
? 如果要想表示出全文检索,则使用 “$text” 判断符,而要想进行数据的查询则使用 “$search” 运算符:
? |- 查询指定关键字:{"$search" : "查询关键字"};
? |- 查询多个关键字(或关系):{"$search" : "查询关键字 查询关键字 查询关键字 ..."}
? |- 查询多个关键字(与关系):{"$search" : ""查询关键字 "" 查询关键字 "..."}
? |- 查询多个关键字(排除某一个):{"$search" : "查询关键字 查询关键字 查询关键字 ... -排除关键字"}
范例:查询单个内容
范例:查询包含有 “gry” 和 “sfq” 的信息
范例:查询同时包含有 “mldn” 与 “lxh” 的内容
范例:查询包含有 “mldn” 但是没有 “gyh” 的内容
? 但是在进行全文检索操作的时候还