五、MongoDB管道——概念篇
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了五、MongoDB管道——概念篇相关的知识,希望对你有一定的参考价值。
参考技术A 了解Linux的同学应该不陌生,管道是将上一条命令产生的结果作为下一条命令的输入,用”|“表示。而在MongoDB中也有类似的概念,它的全称是”聚合管道(Aggregate Pipeline)“,异曲同工。
为了清晰的阐述管道的概念,需要先明确一些相关概念。
表示聚合管道
一个aggregate由多个阶段组成。上一阶段产生的结果会作为下一阶段的输入,所以也会被形象的称为流水线(Pipeline)。
看一个官网的例子:
stage 1:通过match命令筛选出目标文档。
stage 2: 然后将筛选出来的文档再通过group命令进行分组,最后通过sum命令对分组后的数据进行累加操作。
这个概念相对复杂,以下仅为个人理解。
在MongoDB中,管道命令在单个集合上运行,从逻辑上将整个集合传递到聚合管道。
为了尽可能优化操作,请使用一下策略以避免扫描整个集合(类似于mysql中的全表扫描)。
如果聚合操作仅需要集合中的数据子集,请使用 limit, match操作使用合适的索引,来扫描集合中匹配的文档。
聚合管道中有内部优化阶段,这是一个大话题,后期再说。
聚合管道优化
管道操作符是用于描述管道各个阶段所做操作的类型。比如 group,表示对文档分组。
本篇仅了解管道相关的一些概念,未来会写一篇关于实际操作的博客
《MongoDB入门教程》第03篇 MongoDB基本概念
本文将会介绍 MongoDB 中的一些基本概念,例如文档、集合、数据库以及命名空间等。
数据格式
在 MongoDB 中,数据使用 JSON 或者 BSON 格式进行处理和存储。
JSON
JSON 全称为 JavaScript Object Notation,是一种轻量级的数据交换格式。JSON 语法基于 JavaScript ECMA-262 3rd edition 的一个子集。
一个 JSON 文档就是一个由字段和值组成的集合,遵循特定的格式。例如:
"first_name": "John",
"last_name": "Doe",
"age": 22,
"skills": ["Programming","Databases", "API"]
BSON
BSON 代表 Binary JSON,它是一种类 JSON 文档的二进制序列化。BSON 更注重存储和处理的效率。
文档
MongoDB 以 BSON 文档的形式存储数据记录,简称为文档(Document)。
文档是一个由字段-值组成的集合,结构如下:
field_name1: value1,
field_name2: value2,
field_name3: value3,
...
以上语法中,字段名是字符串,字段值可以是数字、字符串、对象、数组等。例如:
_id: ObjectId("5f339953491024badf1138ec"),
title: "SQL编程思想",
isbn: "9787121421402",
publisher: "电子工业出版社",
published_date: new Date('2021-10-01'),
author: first_name: "旭阳", last_name: "董"
该文档包含以下字段-值:
- _id 是一个 ObjectId;
- title 是一个字符串;
- isbn 是一个字符串;
- publisher 是一个字符串;
- published_date 是一个 Date 类型数据;
- author 是一个嵌入式文档,包含了两个字段: first_name 和 last_name。
如果你了解关系型数据,可以看出文档就像是表中的一行记录,但是它比数据行更具有表达性。
文档中的字段名需要遵循以下规则:
- MongoDB 保留字段 _id 用于唯一标识一个文档;
- 字段名不能包含 null 字符;
- 最外层的字段名不能进以 $ 符号开始。
集合
MongoDB 使用集合(Colletion)存储文档。一个集合就是一组文档。
MongoDB 中的集合类似于关系型数据库中的表。
MongoDB | RDBMS |
---|---|
文档 | 行 |
集合 | 表 |
表拥有固定的模式(字段定义),但是集合的模式是动态的。动态模式意味着集合中的多个文档结构可能完全不同。例如,以下文档可以存储在同一个集合中:
title: "SQL编程思想",
published_date: new Date('2021-10-01')
title: "MongoDB从入门到商业实战",
published_date: new Date('2019-09-01'),
isbn": "9787121372247"
第2个文档比第1个文档多个一个字段。理论上来说,每个文档都可以有不同的字段。
一个集合拥有一个名字,例如 books。集合名词不能包含以下内容:
- $ 字符;
- null(\\0)字符;
- 空字符串;
- 以 system 开头,因为 system* 是 MongoDB 内部集合的保留名。
数据库
MongoDB 集合存储在数据库中。 单个 MongoDB 实例可以包含多个数据库(Database)。
数据库可以通过名字进行引用,例如 bookdb。数据库名不能为以下内容:
- 一个空字符串(“”);
- 包含以下字符:/、\\、.、“、*、<、>、:、|、?、$、空格或者 \\0(空字符);
- 长度超过 64 字节。
MongoDB 还包含一些保留的数据库名称,例如 admin、local 以及 config,我们不能使用这些名称创建新的数据库。
命名空间
命名空间(Namespace)由数据库名加上其中的集合名组成。命名空间可以用于完整引用一个集合。
例如,对于数据库 bookdb 中的集合 books,命名空间为 bookdb.books。
以上是关于五、MongoDB管道——概念篇的主要内容,如果未能解决你的问题,请参考以下文章
鸿蒙内核源码分析(管道文件篇) | 如何降低数据流动成本 | 百篇博客分析OpenHarmony源码 | v70.01