MongoDB文档--架构体系
阿丹:
在开始学习先了解以及目标知识的架构体系。就能事半功倍。
架构体系
MongoDB的架构体系由以下几部分组成:
- 存储结构:MongoDB采用文档型存储结构,一个数据库包含多个集合,一个集合包含多个文档。
- 存储形式:MongoDB采用二进制存储形式,数据以二进制形式存储在数据库中。
- 目录结构:MongoDB服务(mongod)负责数据存储和查询,数据路由服务(mongos)负责数据和查询的路由,shell客户端(mongo)用于与数据库进行交互,导入导出工具(mongoimport / mongoexport)用于导入和导出数据,备份恢复工具(mongodump / mongorestore)用于备份和恢复数据,拉取并重放oplog的工具(mongooplog)用于拉取oplog并重放数据,监控工具(mongostat、mongotop、mongosniff)用于监控数据库的运行状态,GridFS的命令行操作工具(mongofiles)用于操作GridFS文件系统,性能测试工具(mongoperf,暂时只能测I/O)用于测试数据库的性能,查看bson文件的工具(bsondump)用于查看bson文件的内容。
- 数据存储:MongoDB的数据存储在一个默认的数据目录中,该目录位于安装目录的data/db下。每个数据库都有一个对应的.ns文件和一些数据文件,数据文件会随着数据量的增加而变得越来越多。
- 分片集群:MongoDB支持分片集群部署,可以将数据分布在多个节点上,提高系统的扩展性和可靠性。在分片集群中,每个节点都可以存储数据和路由查询,同时每个节点都有自己的 oplog 和 config set。
综上所述,MongoDB的架构体系包括存储结构、存储形式、目录结构、数据存储和分片集群等方面。这个架构体系使得MongoDB具有高性能、高扩展性、查询语言丰富、易于使用等优点,并且能够满足不同应用场景的需求。
数据库中数据存储架构体系
MongoDB的数据结构类似于文档型数据库,其数据存储在称为“集合”(Collections)的容器中。每个集合包含多个文档(Documents),每个文档又由多个键值对(Key-Value Pairs)组成。这些键值对包含了具体的属性和值,类似于关系型数据库中的字段(Fields)和数据。
在MongoDB中,一个数据库包含多个集合,这些集合可以按照不同的方式进行组织和分类。与关系型数据库类似,MongoDB也支持使用模式(Schema)来定义文档的结构和属性。
下面是一个简单的MongoDB数据结构的示例:
{"_id": ObjectId("5a5e0f551df5c11b5e5b56c3"),"name": "John Doe","age": 30,"email": "johndoe@example.com","address": {"street": "123 Main St","city": "Anytown","state": "CA","zip": "12345"},"phoneNumbers": [{"type": "home","number": "555-555-1234"},{"type": "work","number": "555-555-5678"}]
}
在这个示例中,我们有一个名为“users”的集合,其中包含一个文档,该文档包含了名为“name”、“age”、“email”、“address”和“phoneNumbers”的属性。其中,“address”和“phoneNumbers”是嵌套的对象和数组,可以包含更复杂的数据类型。
总之,MongoDB的数据结构是基于文档的,每个文档都包含一组键值对,其中每个键都唯一标识一个属性,每个值都是一个数据类型。与关系型数据库不同,MongoDB中的数据类型可以是复杂的对象和数组,而不仅仅是简单的表和字段。
结构解读
在MongoDB中,一个集合(Collection)就像一个容器,用于存储多个文档(Documents)。每个文档就像一个JSON对象,包含一组键值对,其中每个键都唯一标识一个属性,每个值都是一个数据类型。因此,一个集合可以包含多个文档,就像一张表可以包含多行数据一样。
但是,MongoDB中的文档并不是像关系型数据库中的行那样存储在集合中的。相反,文档之间是独立的存在的,它们只是被存储在集合中以便可以轻松地查询和管理。这也就意味着,在MongoDB中,文档的顺序是不确定的,它们可以在集合中任意排列和重新排列。
总之,MongoDB中的集合类似于关系型数据库中的表,但它们可以包含多个文档,每个文档都是一个独立的JSON对象,具有自己的键值对和数据类型。
类似于一个集合就是一个表,里面可以放很多不规定字段的对象。
对比mysql来说在mysql中的表中的对象是已经被规定好字段以及格式的,这就是MongoDB的优点。更加的灵活,他们只需要排列在集合中就可以被存入并且可以被查询和使用。
mongdb工作原理-增/删/改/查原理
MongoDB是一种基于文档的NoSQL数据库,其工作原理如下:
增加数据:
当需要向MongoDB中添加数据时,可以通过insertOne()
或insertMany()
等方法将一个或多个文档插入到集合中。这些文档可以是JSON格式,也可以是其他数据类型,例如二进制数据或地理位置信息等。
删除数据:
要删除MongoDB中的数据,可以使用deleteOne()
、deleteMany()
或findOne()
等方法来删除符合条件的文档。删除操作会将选定的文档从集合中永久删除,但不会影响集合中的其他文档。
更新数据:
要更新MongoDB中的数据,可以使用updateOne()
、updateMany()
或findOneAndUpdate()
等方法来修改符合条件的文档。更新操作可以修改文档中的某些属性或添加新属性,也可以将整个文档替换为另一个文档。
查询数据:
要查询MongoDB中的数据,可以使用find()
、findOne()
、count()
、aggregate()
等方法来查找符合条件的文档。查询操作可以根据文档中的属性进行筛选、排序、分页等操作,也可以使用聚合函数对数据进行统计和分析。
总之,MongoDB的工作原理是通过增、删、改、查等操作来管理和操作文档集合。这些操作可以通过MongoDB的驱动程序或客户端进行,支持多种编程语言和平台。由于MongoDB是一种NoSQL数据库,它具有灵活的数据结构和查询语言,能够适应不同类型和规模的应用程序。
mongdb工作原理-高级用法索引原理
MongoDB的索引是用于提高查询效率和加速查询功能的数据结构。索引是在集合中的文档上创建的,它可以包含一个或多个字段,并且按照特定的顺序排序。
索引的工作原理如下:
创建索引:
在集合中创建索引需要使用createIndex()
方法,该方法可以指定索引的字段和排序方式。例如,以下代码将在集合中的age
字段上创建一个升序索引:
db.collection.createIndex({ age: 1 })
查询索引:
创建索引后,可以使用find()
方法进行查询。MongoDB将根据索引的排序方式进行查询,从而快速定位到需要的数据。例如,以下代码将查询年龄大于等于18岁的所有文档:
db.collection.find({ age: { $gte: 18 } })
更新索引:
当集合中的数据发生变化时,索引也需要随之更新。当插入、更新或删除文档时,MongoDB会自动更新相关的索引。如果要手动更新索引,可以使用update()
方法或save()
方法来更新文档。
删除索引:
要删除集合中的索引,可以使用dropIndex()
方法。例如,以下代码将删除在age
字段上创建的索引:
db.collection.dropIndex({ age: 1 })
总之,MongoDB的索引是用于提高查询效率和加速查询功能的数据结构,可以在集合中的文档上创建,包含一个或多个字段,并按照特定的顺序排序。索引的创建、查询、更新和删除都需要使用相应的MongoDB方法进行操作。
相关文章:

MongoDB文档--架构体系
阿丹: 在开始学习先了解以及目标知识的架构体系。就能事半功倍。 架构体系 MongoDB的架构体系由以下几部分组成: 存储结构:MongoDB采用文档型存储结构,一个数据库包含多个集合,一个集合包含多个文档。存储形式&#…...

GEE学习03-Geemap配置与安装,arcgis pro自带命令提示符位置等
跟着吴秋生老师的视频开展的学习,首先购买了云,用来设置全局。 1、尝试使用arcgis pro自带的conda conda env list查看电脑上环境,我自己电脑上有三个环境,使用的arcgis pro python克隆的环境作为的默认的环境 但是这样的前提…...

软件测试面试总结——http协议相关面试题
前言 在PC浏览器的地址栏输入一串URL,然后按Enter键这个页面渲染出来,这个过程中都发生了什么事?这个是很多面试官喜欢问的一个问题 如果测试只是停留在表面上点点点,不知道背后的逻辑,是无法发现隐藏的bug,只能找一…...

大数据与okcc呼叫中心融合的几种方式
在实际的生产实践中,为提高营销效率,避免骚扰大众,很多呼叫中心业务会与大数据平台进行合作,进行精准营销。 买卖数据是非法的,大数据平台方并不会提供直接的数据,一般情况下,提供的数据都是脱…...

WAF绕过-工具特征-菜刀+冰蝎+哥斯拉
WAF绕过主要集中在信息收集,漏洞发现,漏洞利用,权限控制四个阶段。 1、什么是WAF? Web Application Firewall(web应用防火墙),一种公认的说法是“web应用防火墙通过执行一系列针对HTTP/HTTPS的安…...
使代码减半的5个Python装饰器
大家好,到目前为止,Python编程语言由于其语法简单,在机器学习和网络开发等各个领域的应用功能强大。除非绝对必要,装饰器一般很少出现在视野中,比如使用staticmethod装饰器来表示类中的静态方法。装饰器能提供的大量强…...
线程池的线程回收问题
首先,线程池里面分为核心线程和非核心线程。 核心线程是常驻在线程池里面的工作线程,它有两种方式初始化。 向线程池里面添加任务的时候,被动初始化主动调用prestartAllCoreThreads方法 当线程池里面的队列满了的情况下,为了增加…...

盘点那些不想骑车的原因和借口。
在自行车骑行的热潮中,我们都会找到各种千奇百怪的借口来解释我们为什么不想骑。本文将结合当前热点话题和趋势,从心理学、文化等多个角度,深入探讨这些借口背后的原因。 首先,我们不能忽视的是,骑行是一项需要耐力和毅…...

【深度学习Week3】ResNet+ResNeXt
ResNetResNeXt 一、ResNetⅠ.视频学习Ⅱ.论文阅读 二、ResNeXtⅠ.视频学习Ⅱ.论文阅读 三、猫狗大战Lenet网络Resnet网络 四、思考题 一、ResNet Ⅰ.视频学习 ResNet在2015年由微软实验室提出,该网络的亮点: 1.超深的网络结构(突破1000层&…...

Visual Studio 2022的MFC框架全面理解
我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Visual Studio 2022开发工具下的MFC框架知识。 MFC(Microsoft Foundation Class,微软基础类库)是微软为了简化程序员的开发工作所开发的一套C类的集合…...
C# 消息队列 (MSMQ) 进程之间的通信
2个程序之间使用消息队列进行通信。 该代码只适用.NET Framework 版本,如果是.NET Core 请使用其他第三方消息队列框架,因为.NET Core 对System.Messaging 已经不支持呢。 进程1用于创建消息队列,然后发送消息。 代码如下: using System; u…...
算法练习(4):牛客在线编程05 哈希
package jz.bm;import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet;public class bm5 {/*** BM50 两数之和*/public int[] twoSum (int[] numbers, int target) {int[] res new int[…...

数字信号处理——频谱分析
数字信号处理——频谱分析 频谱分析 频谱分析是一种将复杂信号分解为较简单信号的技术。许多物理信号均可以表示为许多不同频率简单信号的和。找出一个信号在不同频率下的信息(如振幅、功率、强度或相位等)的做法即为频谱分析。 频谱 频谱是指一个时域…...
[软件工程] 架构映射战略设计方案模板
3 系统上下文 结合全局分析阶段获得的价值需求(利益相关者、系统愿景、系统范围)确定系统上下文,体现用户、目标系统与伴生系统之间的关系。 3.1 概述 绘制系统上下文图,明确解空间的系统边界。 3.2 系统协作业务流程1…n 根据全局…...
Springboot MongoDB 事务
目录 1. 事务和TransactionTemplate 2. 事务和MongoTransactionManager 3. 响应式事务 4. 事务和TransactionalOperator 5. 事务和ReactiveMongoTransactionManager 6. 事务内部的特殊行为 从版本4开始,MongoDB支持 事务。事务是建立在 会话之上的,…...

SAP自建表日志
文章目录 1.在表里加上日志记录字段1.1 加入日志结构1.2 在代码中调用记录日志通用函数1.3 在SM30里面记录日志1.4 缺点1.5 优点 2.表技术设置-日志数据更改2.1 RZ10或者RZ11修改系统参数2.2 设置表的属性2.3 查询日志2.4 缺点2.5 优点 3 SCDO文档对象3.1 勾选相应字段-数据元素…...
ansible-kubeadm在线安装单masterk8s v1.19-v1.20版本
ansible可以安装的KS8版本如下: [rootk8s-master01 ~]# yum list kubectl --showduplicates | sort -r kubectl.x86_64 1.20.0-0 kubernetes kubectl.x86_64 1.20.0-0 …...

mongodb docker 及常用命令
MongoDB属于非关系型数据库,它是由C编写的分布式文档数据库。内部使用类似于Json的bson二进制格式。 中文手册 https://www.w3cschool.cn/mongodb/ 安装 https://www.mongodb.com/try/download/community 二进制安装可见另一篇: centos7 mongodb 4.0.28…...

最新版本mac版Idea 激活Jerbel实现热部署
1.环境准备 1.安装docker desktop 客户端创建本地服务 2.创建guid 3.随便准备一个正确格式的邮箱 2.具体操作 1.通过提供的镜像直接搭建本地服务 docker pull qierkang/golang-reverseproxy docker run -d -p 8888:8888 qierkang/golang-reverseproxy2.guid 通过如下网址直…...
基于Ubuntu22.04部署bcache模式ceph
作者:吴业亮 博客:wuyeliang.blog.csdn.net 将Bcache集成到Ceph OSD后端可以带来一些优点和潜在的缺点。以下是它们的一些方面: 优点: 提高性能:BCache作为SSD缓存设备,可以提供更快的数据读取和写入速度…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...

jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...

Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...