当前位置: 首页 > news >正文

MongoDB文档--架构体系

阿丹:

        在开始学习先了解以及目标知识的架构体系。就能事半功倍。

架构体系

   MongoDB的架构体系由以下几部分组成:

  1. 存储结构:MongoDB采用文档型存储结构,一个数据库包含多个集合,一个集合包含多个文档。
  2. 存储形式:MongoDB采用二进制存储形式,数据以二进制形式存储在数据库中。
  3. 目录结构:MongoDB服务(mongod)负责数据存储和查询,数据路由服务(mongos)负责数据和查询的路由,shell客户端(mongo)用于与数据库进行交互,导入导出工具(mongoimport / mongoexport)用于导入和导出数据,备份恢复工具(mongodump / mongorestore)用于备份和恢复数据,拉取并重放oplog的工具(mongooplog)用于拉取oplog并重放数据,监控工具(mongostat、mongotop、mongosniff)用于监控数据库的运行状态,GridFS的命令行操作工具(mongofiles)用于操作GridFS文件系统,性能测试工具(mongoperf,暂时只能测I/O)用于测试数据库的性能,查看bson文件的工具(bsondump)用于查看bson文件的内容。
  4. 数据存储:MongoDB的数据存储在一个默认的数据目录中,该目录位于安装目录的data/db下。每个数据库都有一个对应的.ns文件和一些数据文件,数据文件会随着数据量的增加而变得越来越多。
  5. 分片集群: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类的集合&#xf…...

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支持 事务。事务是建立在 会话之上的&#xff0c…...

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缓存设备,可以提供更快的数据读取和写入速度…...

<6>-MySQL表的增删查改

目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表&#xf…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

C++ 基础特性深度解析

目录 引言 一、命名空间(namespace) C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用(reference)​ C 中的引用​ 与 C 语言的对比​ 四、inline(内联函数…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...