- Java197
- 编程8
- 设计78
- DevOps8
- 数据结构和算法16
- 数据库101
- 网络19
- 分布式74
- 大数据33
- 软件工程3
- 工作8
- 笔记30
- JavaSE61
- JavaEE15
- 软件20
- 工具37
- 框架68
- 中间件9
- 编程范式4
- 编程语言3
- Python6
- 架构31
- 设计模式27
- 重构7
- DDD2
- UML4
- 综合22
- 监控2
- 线性表4
- 树6
- 数据库综合3
- 数据库中间件4
- 关系型数据库20
- 文档数据库12
- KV数据库19
- 列式数据库14
- 搜索引擎数据库25
- 网络综合8
- 网络协议6
- 网络技术4
- 操作系统13
- 操作系统应用2
- 分布式综合3
- 分布式理论12
- 分布式协同13
- 分布式调度6
- 分布式高可用1
- 分布式通信31
- 分布式存储7
- hadoop7
- hive8
- spark1
- flink9
- 其他15
- 人工智能1
- 基础特性15
- 高级特性7
- 容器7
- IO10
- 并发12
- JVM12
- JavaWeb6
- 服务器8
- 构建9
- IDE4
- 监控诊断6
- JavaBean2
- 模板引擎4
- 测试5
- Spring61
- ORM3
- 安全8
- 缓存5
- 流量控制2
- 微服务5
- 解决方案8
- Git3
- Shardingsphere2
- Mysql10
- 数据库``1
- MongoDB11
- Redis17
- HBase12
- Elasticsearch16
- Elastic8
- Linux11
- 命令1
- 分布式协同综合6
- ZooKeeper6
- RPC8
- MQ17
- hdfs4
- 效能6
- 方法论2
- 规范3
- Tomcat6
- Maven7
- Spring综合5
- Spring核心24
- Spring数据10
- SpringWeb8
- SpringIO4
- Spring集成4
- Spring安全1
- Spring其他4
- RPC综合4
- Dubbo2
- MQ综合2
- Kafka9
- RocketMQ4
- 其他MQ1
MongoDB 的 CRUD 操作
一、基本 CRUD 操作
MongoDB 的 CRUD 操作是针对 document 的读写操作。
Create 操作
MongoDB 提供以下操作向一个 collection 插入 document
db.collection.insertOne()
:插入一条 documentdb.collection.insertMany()
:插入多条 document
MongoDB 的聚合操作
聚合操作处理数据记录并返回计算结果。聚合操作将来自多个 document 的值分组,并可以对分组的数据执行各种操作以返回单个结果。 MongoDB 提供了三种执行聚合的方式:聚合管道,map-reduce 函数和单一目的聚合方法。
Pipeline
Pipeline 简介
MongoDB 的聚合框架以数据处理管道(Pipeline)的概念为模型。
MongoDB 通过 db.collection.aggregate()
方法支持聚合操作。并提供了 aggregate
命令来执行 pipeline。
MongoDB 索引
MongoDB 索引简介
索引的作用
MongoDB 在 collection 数据级别上定义索引。
索引通常能够极大的提高查询的效率。如果没有索引,MongoDB 在读取数据时必须扫描 collection 中的每个 document 并选取那些符合查询条件的记录。
这种扫描全集合的查询是非常低效的,特别是在处理大量的数据时。查询可能要花费几十秒甚至几分钟,这种性能开销是不可接受的。
MongoDB 事务
writeConcern 可以决定写操作到达多少个节点才算成功。
- 默认:多节点复制集不做任何设定,所以是有可能丢失数据。
w: "majority"
:大部分节点确认,就视为写成功w: "all"
:全部节点确认,才视为写成功
journal 则定义如何才算成功。取值包括:
true
:写操作落到 journal 文件中才算成功;false
:写操作达到内存即算作成功。
MongoDB 复制
副本和可用性
副本可以提供冗余并提高数据可用性。在不同数据库服务器上使用多个数据副本,可以提供一定程度的容错能力,以防止单个数据库服务器宕机时,数据丢失。
在某些情况下,副本还可以提供更大的读取吞吐量。因为客户端可以将读取操作发送到不同的服务器。在不同数据中心中维护数据副本可以提高数据本地性和分布式应用程序的可用性。您还可以维护其他副本以用于专用目的:例如灾难恢复,报告或备份。
MongoDB 副本
MongoDB 中的副本集是一组维护相同数据集的 mongod 进程。一个副本集包含多个数据承载节点和一个仲裁器节点(可选)。在数据承载节点中,只有一个成员被视为主要节点,而其他节点则被视为次要节点。
MongoDB 分片
分片集群简介
当 MongoDB 需要存储海量数据时,单节点不足以存储全量数据,且可能无法提供令人满意的吞吐量。所以,可以通过 MongoDB 分片机制来支持水平扩展。
分片集群特点
对应用完全透明
数据自动均衡
动态扩容
提供三种分片方式
分片集群组件
MongoDB 分片集群含以下组件:
- shard:每个分片包含分片数据的子集。每个分片都可以部署为副本集。
- mongos:mongos 充当查询路由器,在客户端应用程序和分片集群之间提供接口。从 MongoDB 4.4 开始,mongos 可以支持 hedged reads 以最大程度地减少延迟。
- config servers:提供集群元数据存储和分片数据分布的映射。
MongoDB 建模示例
关系型模型
嵌入式文档一对一关系模型
嵌入式文档一对一关系模型 - 嵌入式文档模式
// patron document
{
_id: "joe",
name: "Joe Bookreader"
}
// address document
{
patron_id: "joe", // reference to patron document
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: "12345"
}
MongoDB 建模
MongoDB 的数据模式是一种灵活模式,关系型数据库要求你在插入数据之前必须先定义好一个表的模式结构,而 MongoDB 的集合则并不限制 document 结构。这种灵活性让对象和数据库文档之间的映射变得很容易。即使数据记录之间有很大的变化,每个文档也可以很好的映射到各条不同的记录。 当然在实际使用中,同一个集合中的文档往往都有一个比较类似的结构。
数据模型设计中最具挑战性的是在应用程序需求,数据库引擎性能要求和数据读写模式之间做权衡考量。当设计数据模型的时候,一定要考虑应用程序对数据的使用模式(如查询,更新和处理)以及数据本身的天然结构。
MongoDB 运维
MongoDB 安装
Windows
(1)下载并解压到本地
进入官网下载地址:官方下载地址 ,选择合适的版本下载。
(2)创建数据目录
MongoDB 将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要创建它。