《MongoDB入门教程》 - MongoDB基础介绍

news2024/12/27 13:09:12

前言

时间也过太快了嘛,一晃上次更新都又过去6个月了,再不更新就变成年更博客了。
对了,第一次疫情也过去了,最近开始二阳了,希望大家能继续挺过去吧
本篇文章初尝试使用ChatGPT进行,博主主要负责排版和总结

引用文章

  • 《MongoDB权威指南》

一、简介

1.1什么是MongoDB

chatGPT: MongoDB是一种开源的文档型数据库管理系统,它以高度可扩展性、灵活性和性能而闻名。MongoDB采用了NoSQL(非关系型数据库)的设计理念,以面向文档的方式存储数据

MongoDB中所有的核心设计都是围绕着【高度可扩展性、灵活性和性能】来进行

1.2优势

1.2.1文档存储:

MongoDB使用BSON(二进制JSON)格式存储数据,支持嵌套文档和数组。使用了“文档”来代替“行” 的概念,没有预定义模式,文档中的键值对大小和内容没有进行固定,可以进行快速迭代

1.2.2可拓展性:

MongoDB具有良好的横向扩展性,可通过添加更多服务器节点处理更大的数据量和负载。由于MongoDB是面向文档的数据模型使跨多台服务器拆分数据更加容易。MongoDB 会自动平衡跨集群的数据和负载,自动重新分配文档,并将读写操作路由到正确的机器上

如果想增加存储空间或增加读写操作的吞吐量,那么可以购买额外的服务器,并将它们添加到集群中。这既便宜又便于扩展,但管理 1000 台机器比管理 1 台机器困难得多。

在这里插入图片描述

1.2.3高性能:

MongoDB使用内存映射技术,将数据存储在内存中,提供快速的读取和写入操作。其中WiredTiger 存储引擎
中使用了机会锁

1.2.4其他优势

  • 强大的查询功能:MongoDB支持灵活的文档查询、范围查询、排序、聚合和地理空间查询等。
  • 复制和容错:MongoDB支持数据复制和容错机制,配置多个副本集以确保数据的高可用性和可靠性。
  • 分片:MongoDB可将数据分散存储在多个服务器上,实现数据的水平切分,提高系统的扩展性和负载均衡能力。
  • 自动分片迁移:MongoDB具备自动分片迁移功能,可在数据量增加或减少时自动调整分片的位置和数据分布。

1.3使用场景

  • 处理大量非结构化数据的项目。
  • 强调灵活性和可扩展性的项目。
  • 大数据分析。
  • 实时数据处理。
  • 内容管理系统。
  • 社交网络应用。
  • 日志管理等。

二、核心概念

2.1文档(核心中的核心)

文档是 MongoDB 中的基本数据单元,可以粗略地认为其相当于关系数据库管理系统中的行(但表达力要强得多)

文档是由一组**有序的键值对(类似于 JSON)**集合组成,通常包含一个或多个键值对,如:

{"greeting" : "Hello, world!", "views" : 3}

其中是字符串类型。除了少数例外的情况,可以使用任意 UTF-8 字符作为键。


注意:

  1. 在同个文档中不能包含相同的键
  2. MongoDB 会区分类型和大小写,见下面描述
类型不同,所以下述是两个文档
{"count" : 5}
{"count" : "5"}
=========================
大小写不同,所以下述是两个文档
{"count" : 5}
{"Count" : 5}

2.2集合

集合就是一组文档。如果将文档比作关系数据库中的行,那么一个集合就相当于一张表。

集合具有动态模式的特性。这意味着文档可以在同一个集合中存储不同结构的文档,如:

{"greeting" : "Hello, world!", "views": 3}
{"signoff": "Good night, and good luck"}

2.2.1那为什么需要多个集合?

  1. 数据分离:当你的应用程序需要处理具有不同结构或不同用途的数据时,将其分开存储在不同的集合中可以更好地组织数据。这样做可以提高查询效率,并使数据模型更加清晰和易于管理。

  2. 安全性和权限控制:使用多个集合可以更好地控制对数据的访问权限。你可以为每个集合设置不同的权限和安全策略,以确保只有特定用户或角色可以访问特定集合中的数据。

  3. 性能优化:当数据集增长到巨大规模时,查询和索引操作可能会变得更加复杂和耗时。通过将数据分散到多个集合中,可以更好地利用硬件资源和并行处理能力,提高数据库的性能和响应速度。

  4. 数据生命周期管理:在一些应用中,数据的生命周期可能会有不同的阶段,例如原始数据、处理数据、归档数据等。通过使用多个集合,可以更好地管理数据的生命周期,并根据需要进行数据迁移和清理。

  5. 跨多租户应用:如果你的应用是一个多租户应用,即为多个独立的客户提供服务,使用多个集合可以帮助实现数据的逻辑隔离,每个客户拥有自己独立的数据集合,以确保数据的安全性和隐私。

2.3数据库

MongoDB 使用集合对文档进行分组,使用数据库对集合进行分组。一个 MongoDB 实例可以承载多个数据库,每个数据库有零个或多个集合。
一般来说:将单个应用程序的所有数据都存储在同一个数据库中

2.4数据类型

字符串:用于存储文本数据,最长可以达到16MB。

数值:包括整数和浮点数。整数可以是32位或64位,而浮点数可以是单精度(32位)或双精度(64位)。

布尔值:用于表示真或假。

日期时间:表示日期和时间,以毫秒为单位存储自Unix纪元以来的时间戳。

Null值:表示空值或缺失值。

数组:表示一组有序值的列表。

内嵌文档:表示嵌套在文档中的另一个文档,可以嵌套多层。

二进制数据:用于存储二进制数据,如图像、视频和声音等。

除此之外,MongoDB还支持特殊数据类型,如ObjectId类型,它是一个12字节的唯一标识符,通常用于文档的_id字段。还有正则表达式类型,用于存储正则表达式,以及JavaScript代码类型,用于在MongoDB服务器端执行JavaScript代码。

2.4.1特殊说明

数组
MongoDB可以对数组进行查询并使用其内容创建索引,还允许使用原子更新来修改数组的内容。

内嵌文档
可以使数据组织的方式更加自然,而不仅仅是键 – 值对这样的扁平结构,如

{
 "name" : "John Doe",
 "address" : {
 "street" : "123 Park Street",
 "city" : "Anytown",
 "state" : "NY"
 }
}

与数组一样,MongoDB“理解”内嵌文档的结构,并能够在其中创建索引、执行查询或进行更新。
ObjectId和_id:
每个文档都必须有一个唯一的 “_id” 键。“_id” 的值可以是任何类型,但其默认为 ObjectId。
ObjectId 占用了 12 字节的存储空间,组成方式如下
在这里插入图片描述
其中值得注意的是:ObjectId值包含时间戳信息,因此可以按照生成时间的先后顺序进行排序。这在一些应用场景中非常有用,例如按时间查询文档或获取最新的文档。

三、小结

本篇文章主要介绍了MongoDB的一些优势特点和一些核心概念和术语,我们将在后续进行学习MongoDB的CRUD操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/530584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql使用xtrabackup方式复制过滤某一个数据库

需求: 搭建一个新的从库,只复制过滤源端数据库里的其中一个数据库workflow到新实例上。 一 操作步骤 1.1 在目标端新建一个数据库实例 略 1.2 在源端做备份 /home/urman-agent/bin/xtrabackup --defaults-file/data/mysql/etc/13314/my.cnf --targ…

redis缓存穿透、缓存击穿、缓存雪崩

一、缓存 缓存是数据交换的缓冲区,是存储数据的临时地方,一般读写性能较高。 如浏览器会把静态资源先加载到浏览器缓存中,tomcat中有应用层缓存等,则数据库也有数据库缓存。 缓存的作用: 降低后端负载提高读写效率…

ES8基本命令

ElasticSearch是面向文档型数据库 构造类似于数据库:indexes(索引库数据库)-->types(类型表)-->documents(文档行)-->field(字段字段) 但是在7.X开始,Type已经开始被废弃。 正排索引:根据主键id关联内容,然后再找关键字…

微服务—Redis实用篇-黑马头条项目-达人探店功能(使用set与zset实现)

微服务—Redis实用篇-黑马头条项目-达人探店功能(使用set与zset实现) 1、达人探店 1.1、达人探店-发布探店笔记 发布探店笔记 探店笔记类似点评网站的评价,往往是图文结合。对应的表有两个: tb_blog:探店笔记表,包含笔记中的标…

Liunx基础命令 - mkdir命令

mkdir命令 – 创建目录文件 mkdir命令来自英文词组”make directories“的缩写,其功能是用来创建目录文件。使用方法简单,但需要注意若要创建的目标目录已经存在,则会提示已存在而不继续创建,不覆盖已有文件。而目录不存在&#…

路径规划算法:基于蜉蝣优化的路径规划算法- 附代码

路径规划算法:基于蜉蝣优化的路径规划算法- 附代码 文章目录 路径规划算法:基于蜉蝣优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法蜉蝣…

Linux 无网环境下离线安装rpm

概述 搭建了私有yum仓库,想实现无网环境下Docker rpm离线安装的方法 1. 使用和配置清华源 2. 免安装下载rpm包及其依赖 3. 寻找特定的rpm包并补全依赖 清华的清华源 名称连接帮助文档备注主页清华大学开源软件镜像站 | Tsinghua Open Source MirrorAOSP | 镜像站使…

Swagger 3.0 与 Springboot 集成

springboot版本:2.3.12.RELEASE swagger版本:3.0.0 1&#xff1a;pom文件添加如下代码: <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version>&…

离线安装 Docker + Docker registry(Docker仓库)

概述 通过私有yum仓库安装docker 具体内容&#xff1a; 1. 构建私有镜像仓库 2. 准备rpm包 3. 安装部署 4. ansible 安装 卸载 5. shell 脚本安装 卸载 6. 网页连接 7. 构建docker 私有仓库 1. 构建私有镜像仓库 构建简单的yum私有仓库请参考如下文档 http://t.csdn.cn/22bmb…

用chatGPT写chatGPT教学方案

最近从机器学习的原理、数学推理、主流模型架构、chatGPT的Prompt策略&#xff0c;也实际体验了各种AIGC工具&#xff0c;算是较为系统的学习了chatGPT的前世今身&#xff0c;想着有很多人应该跟我一样&#xff0c;没有编程基础、也没有成为chatGPT专家的希望&#xff0c;仅仅通…

LeetCode_Day3 | 反转链表/移除链表的元素/设计个链表

LeetCode_链表 203.移除链表元素1. 题目描述2. 直接使用原表删除1. 思路2. 代码实现 3. 使用虚拟头节点删除1. 思路2. 代码实现 707.设计链表1.题目描述2.单链表&#xff1a;虚拟头节点设计1. 思路2. 代码实现及部分逻辑解释3. 需要注意的点 206.反转链表1.题目描述2. 双指针法…

BIO阻塞模型

作者&#xff1a;V7 博客&#xff1a;https://www.jvmstack.cn 一碗鸡汤 少年辛苦终身事&#xff0c;莫向光阴惰寸功。 —— 杜荀鹤 同步阻塞IO 在介绍阻塞和非阻塞之前先说明一下同步和异步。我们可以将同步和异步看做是发起IO请求的两种方式。同步IO指的是用户空间&…

项目美术部门敏捷开发流程及工具

前言 在项目开发中&#xff0c;针对美术部门的特性和工作风格&#xff0c;合理使用多种工具进行项目管理和进度控制非常必要。如果项目执行中有异地协作、美术内/外包、多项目并行的情况&#xff0c;正确的规划和管理的优势会更加凸显。 而合理使用整套的综合管理工具会让项目…

Day969.如何拆分代码 -遗留系统现代化实战

如何拆分代码 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于如何拆分代码的内容。 当完成了项目的战略设计&#xff0c;大体设计出目标架构&#xff0c;又根据系统的现状&#xff0c;决定采用“战术分叉”的方式进行微服务拆分之后&#xff0c;接下来的难点就变成…

用GPT-4 写2022年天津高考作文能得多少分?

正文共 792 字&#xff0c;阅读大约需要 3 分钟 学生必备技巧&#xff0c;您将在3分钟后获得以下超能力&#xff1a; 积累作文素材 Beezy评级 &#xff1a;B级 *经过简单的寻找&#xff0c; 大部分人能立刻掌握。主要节省时间。 推荐人 | Kim 编辑者 | Linda ●图片由Lexica …

vue工程搭建

1&#xff1a;查看vue及npm版本&#xff1a; 2&#xff1a;执行npm init nuxt-app <project-name>语句&#xff1a; 若出现npm ERR! code ENOLOCAL 请执行如下语句&#xff1a; npm cache verify npm cache clean --force npm i -g npm npm install -g cnpm --regis…

数据库(mysql语句)循环语句

例题1&#xff1a; 20到50之间能被5除余1的所有自然数的和 EDECLARE i int DECLARE s int SET s0 SET i20 白WHILE i <50 BEGIN IF(i%51) SET s s i SET ii1 END PRINT20到50之间能被5除余1的所有自然数的和是cast(s as varchar(20)) 例题2&#xff1a; 实现如下图 代码…

设计模式之门面模式(Facade Pattern 外观模式)

一、模式定义 门面模式(Facade Pattern)&#xff1a;外部与一个子系统的通信必须通过一个统一的外观对象进行&#xff0c;为子系统中的一组接口提供一个一致的界面&#xff0c;外观模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。门面模式又称为外观…

中国南方Oracle用户组沙龙活动:大环境下的Oracle数据库的机遇与挑战

2023年03月12日(周日)在杭州索菲特西湖大酒店 (浙江省杭州市上城区西湖大道333 号)&#xff0c;中国南方Oracle用户组创始人之一&#xff1a;周亮&#xff08;zhou liang&#xff09;组织举办了主题为《大环境下的Oracle数据库的机遇与挑战》活动&#xff0c;大约有50名左右的人…

YMatrix 5.0 故障自动转移功能新实现,运维更方便!

前言 分布式数据库一般都实现了数据多副本的存储以保证数据的高可用性。在多副本存储的基础上&#xff0c;通过切换活跃的存储副本来实现故障转移&#xff0c;是常见的做法。 YMatrix 5.0 实现了在数据库集群所有数据分片上的故障自动转移&#xff0c;完全实现了数据库集群的…