跳至主要內容
MongoDB 的聚合操作

MongoDB 的聚合操作

聚合操作处理数据记录并返回计算结果。聚合操作将来自多个 document 的值分组,并可以对分组的数据执行各种操作以返回单个结果。 MongoDB 提供了三种执行聚合的方式:聚合管道,map-reduce 函数和单一目的聚合方法。

Pipeline

Pipeline 简介

MongoDB 的聚合框架以数据处理管道(Pipeline)的概念为模型。

MongoDB 通过 db.collection.aggregate() 方法支持聚合操作。并提供了 aggregate 命令来执行 pipeline。


钝悟...大约 7 分钟数据库文档数据库MongoDB数据库文档数据库MongoDB聚合
MongoDB 索引

MongoDB 索引

MongoDB 索引简介

索引的作用

MongoDB 在 collection 数据级别上定义索引

索引通常能够极大的提高查询的效率。如果没有索引,MongoDB 在读取数据时必须扫描 collection 中的每个 document 并选取那些符合查询条件的记录。

这种扫描全集合的查询是非常低效的,特别是在处理大量的数据时。查询可能要花费几十秒甚至几分钟,这种性能开销是不可接受的。


钝悟...大约 2 分钟数据库文档数据库MongoDB数据库文档数据库MongoDB索引
MongoDB 事务

MongoDB 事务

writeConcern 可以决定写操作到达多少个节点才算成功。

  • 默认:多节点复制集不做任何设定,所以是有可能丢失数据。
  • w: "majority":大部分节点确认,就视为写成功
  • w: "all":全部节点确认,才视为写成功

journal 则定义如何才算成功。取值包括:

  • true:写操作落到 journal 文件中才算成功;
  • false:写操作达到内存即算作成功。

钝悟...小于 1 分钟数据库文档数据库MongoDB数据库文档数据库MongoDB事务
MongoDB 复制

MongoDB 复制

副本和可用性

副本可以提供冗余并提高数据可用性。在不同数据库服务器上使用多个数据副本,可以提供一定程度的容错能力,以防止单个数据库服务器宕机时,数据丢失。

在某些情况下,副本还可以提供更大的读取吞吐量。因为客户端可以将读取操作发送到不同的服务器。在不同数据中心中维护数据副本可以提高数据本地性和分布式应用程序的可用性。您还可以维护其他副本以用于专用目的:例如灾难恢复,报告或备份。

MongoDB 副本

MongoDB 中的副本集是一组维护相同数据集的 mongod 进程。一个副本集包含多个数据承载节点和一个仲裁器节点(可选)。在数据承载节点中,只有一个成员被视为主要节点,而其他节点则被视为次要节点。


钝悟...大约 7 分钟数据库文档数据库MongoDB数据库文档数据库MongoDB复制
MongoDB 分片

MongoDB 分片

分片集群简介

当 MongoDB 需要存储海量数据时,单节点不足以存储全量数据,且可能无法提供令人满意的吞吐量。所以,可以通过 MongoDB 分片机制来支持水平扩展。

分片集群特点

对应用完全透明

数据自动均衡

动态扩容

提供三种分片方式

分片集群组件

MongoDB 分片集群含以下组件:

  • shard:每个分片包含分片数据的子集。每个分片都可以部署为副本集。
  • mongos:mongos 充当查询路由器,在客户端应用程序和分片集群之间提供接口。从 MongoDB 4.4 开始,mongos 可以支持 hedged reads 以最大程度地减少延迟。
  • config servers:提供集群元数据存储和分片数据分布的映射。

钝悟...大约 5 分钟数据库文档数据库MongoDB数据库文档数据库MongoDB分片
MongoDB 建模示例

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"
}

钝悟...大约 7 分钟数据库文档数据库MongoDB数据库文档数据库MongoDB建模
MongoDB 建模

MongoDB 建模

MongoDB 的数据模式是一种灵活模式,关系型数据库要求你在插入数据之前必须先定义好一个表的模式结构,而 MongoDB 的集合则并不限制 document 结构。这种灵活性让对象和数据库文档之间的映射变得很容易。即使数据记录之间有很大的变化,每个文档也可以很好的映射到各条不同的记录。 当然在实际使用中,同一个集合中的文档往往都有一个比较类似的结构。

数据模型设计中最具挑战性的是在应用程序需求,数据库引擎性能要求和数据读写模式之间做权衡考量。当设计数据模型的时候,一定要考虑应用程序对数据的使用模式(如查询,更新和处理)以及数据本身的天然结构。


钝悟...大约 10 分钟数据库文档数据库MongoDB数据库文档数据库MongoDB建模
MongoDB 运维

MongoDB 运维

MongoDB 安装

Windows

(1)下载并解压到本地

进入官网下载地址:官方下载地址 ,选择合适的版本下载。

(2)创建数据目录

MongoDB 将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要创建它。


钝悟...大约 6 分钟数据库文档数据库MongoDB数据库文档数据库MongoDB运维
MongoDB 教程

MongoDB 教程

MongoDB 是一个基于文档的分布式数据库,由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系型数据库和非关系型数据库之间的产品。它是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。

MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。


钝悟...大约 1 分钟数据库文档数据库MongoDB数据库文档数据库MongoDB
2