1.概述:
Mongo是humongous的中间部分,英文是巨大无比的意思,更优雅叫法是海量数据库,MongoDB是一款非关系型数据库,区别于关系型数据库最显著的特点是没有固定的数据类型。
1.1 特点:
1.记录的是一个文档,它是由字段和值对组成的数据结构
2.同一个集合中可以包含不同字段(类型)的文档对象
3.线上修改数据模式,修改时应用与数据库都无须下线
1.2 区别:
关系型数据库 | 文档型数据库 | |
---|---|---|
模型实体 | 表 | 集合 |
模型属性 | 列 | 字段 |
模型关系 | 表关联 | 内切数组,引用字段关联 |
2.搭建
2.1 安装
服务器下载地址:www.mongodb.com/try/downloa...
客户端下载地址:www.mongodb.com/try/downloa...
mongo -ucc -pcc --authenticationDatabase=admin
3.语句
地址:www.runoob.com/mongodb/mon...
3.1 新增
insertOne();
insertMany();
参数
- document:要写入的文档。
- writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
- ordered:指定是否按顺序写入,默认 true,按顺序写入。

3.2 查询
db.collection.find(query, projection).pretty()
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)

3.3 更新
updateOne();
updateMany();
参数
- query:更新的筛选条件
- update:文档更新的内容
- options:声明一些更新操作的参数

3.4 删除
remove()删除的粒度文档
drop()删除的粒度是集合
参数
- query:删除的筛选条件
- options:参数设置

4.索引
索引是特殊的数据结构,它以一种易于遍历的形式存储集合数据集的一小部分;索引存储一个或一组特定字段的值,按字段的值排序。索引项的排序支持有效的相等匹配和基于范围的查询操作。MongoDB采用B+树作为索引,索引创建在collection上;使用索引的查询。通过索引找到文档,大大的提高查询的效率
4.1 单键索引:基于主键ID进行B+树

4.2 复合索引(name age postion的复合索引)

4.3 索引的操作命令
1.db.collection.getIndexes()
2.db.collection.createIndex({key},{keyName});
3.db.collection.dropIndex("索引名")
4.4 索引的生存时间
针对日期字段,或者包含了日期元素的数组字段,可以使用设定了生存时间的索引,来自动删除字段值超过生存时间的文档
db.collection,createIndex({create_time:1},{expireAfterSeconds:30})
注意:复合索引不具备生存时间的特性
4.5 索引的效果解析
db.collection.explain().find();
详细地址:9.MongoDB之explain(执行计划分析)_mongodb explain-CSDN博客
5.MongoDB复制集
MongoDB复制集的主要意义在于实现服务高可用,类似于Redis的哨兵模式
5.1 功能:
1.数据写入主节点时降数据复制到另一个副本节点上
2.主节点发生故障时自动选举出一个新的代替节点
5.2 作用:
1.数据分发:将数据从一个区域复制到另一个区域,减少另一个区域的读延迟
2.读写分离:不同类型的压力分别在不同节点上执行
3.异地容灾:在数据中心故障时快速切换到异地
5.3 数据是如何复制的?
当一个修改,插入,更新,删除到达主节点时,它对数据的操作记录下来,这些记录称为oplog;从节点通过从主节点不断的获取主节点的oplog,在自己的数据上回放,来保证和主节点数据的一致

5.4 MongoDB复制集的搭建过程
1.创建存放数据的目录 mkdir -p /usr/soft/clusterMongodb/data/db{1,2,3}
2.创建存放日志的文件 mkdir -p /usr/soft/clusterMongodb/logs/db{1,2,3} touch mongod.log
3.创建存放配置的文件 mkdir -p /usr/soft/clusterMongodb/conf/db{1,2,3} touch mongodb.conf
4.分别启动服务 mongod -f /usr/soft/clusterMongodb/conf/db{1,2,3}/mongod.conf
php
rs.initiate({
_id:"rs0",
members:[{
_id:0,
host:"localhost:27117"
},{
_id:1,
host:"localhost:27217"
},{
_id:2,
host:"localhost:27317"
}]
}) 注意:默认情况下非主节点不允许读数据 可以通过执行 rs.secondaryOk() 开启读权限
6.分片集群
6.1 什么时候使用分片集群
将数据水平分到不同的服务器上,数据量突破单机 瓶颈,数据量大,恢复慢,不利于数据管理,并发量突破单机性能瓶颈
6.2 分片集群架构

1.路由节点:提供集群 单一入口,转发应用端请求,选择合适数据节点进行读写,合并多个数据节点的数据
2.配置(目录)节点:提供集群元数据存储,分片数据分布的映射(那些数据放到那个分片)
3.数据节点:以复制集为单位,,横向扩展,所有的分片一起才是完成的数据
6.3 分片集群特点
1.应用全透明,没有特殊处理
2.数据自动均衡
3.动态扩容,无须下线
7.SpringBoot整合
7.1 引入pom

7.2 配置文件


7.3 继承MongoRepository,实现CRUD
解释一下:
xml
<S extends T> List<S> saveAll(Iterable<S> var1);
<S extends T>
是泛型方法的声明部分,如果要写泛型方法,这个是一定要写上的,如果没有这个,编译器会报错,因为它不知道S是什么。
scss
List<S> saveAll(Iterable<S> var1); // 编译报错:S未定义
8.案例
8.1 Mongodb更新多层嵌套数组对象

