MongoDB

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更新多层嵌套数组对象
相关推荐
duration~1 小时前
PostgreSQL并发控制
数据库·postgresql
给力学长2 小时前
自习室预约小程序的设计与实现
java·数据库·vue.js·elementui·小程序·uni-app·node.js
迷茫运维路3 小时前
MySQL5.7主从延迟高排查优化思路
数据库·主从延时高
菜鸟学Python4 小时前
Python web框架王者 Django 5.0发布:20周年了!
前端·数据库·python·django·sqlite
小云数据库服务专线4 小时前
GaussDB 查看会话连接数
数据库·gaussdb
墨迹的陌离5 小时前
【Linux】重生之从零开始学习运维之Mysql
linux·运维·服务器·数据库·学习·mysql
BigBigHang6 小时前
【docker】DM8达梦数据库的docker-compose以及一些启动踩坑
数据库·docker·容器
m0_720245017 小时前
QT(四)基本组件
数据库·qt·microsoft
Databend7 小时前
使用 Databend Cloud 归档 OceanBase 数据数据库
数据库
fei飛fei飞7 小时前
数据库事务中的陷阱:脏读、幻读与不可重复读
数据库