MongDB文档--架构体系

阿丹:

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

架构体系

   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方法进行操作。

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

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

相关文章

前端Vue入门-day06-路由进阶

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 路由的封装抽离 声明式导航 导航链接 两个类名 自定义高亮类名 跳转传参 1. 查询参数传参 2. 动态…

Socket 前端项目结构搭建

npm install socket.io-client --savenpm install element-plus --savenpm install vue-router4.0.12 --save简单的页面搭建 聊天系统登录前端实现 登录模板 <template><div class"login-container"><el-form ref"form" :model"fo…

Maven 打包项目后,接口识别中文乱码

背景 项目在Idea里面运行&#xff0c;调用接口发送中文消息正常&#xff0c;用Maven打包项目后&#xff0c;运行jar包&#xff0c;调用接口发送中文出现乱码。 解决方法 1.Idea编译配置 2.如果更改了上述配置之后还是没有效果&#xff0c;则在运行jar包的前面加上 -Dfile.en…

100天精通Python(可视化篇)——第96天:Pyecharts绘制多种炫酷箱形图参数说明+代码实战

文章目录 专栏导读1. 箱形图介绍1&#xff09;箱形图介绍2&#xff09;怎么看箱型图&#xff1f;3&#xff09;解释说明 2. 普通箱型图3. 水平箱型图4. 群组箱型图5. 带异常点的箱型图书籍推荐 专栏导读 &#x1f525;&#x1f525;本文已收录于《100天精通Python从入门到就业…

适配器模式与装饰器模式对比分析:优雅解决软件设计中的复杂性

适配器模式与装饰器模式对比分析&#xff1a;优雅解决软件设计中的复杂性 在软件设计中&#xff0c;我们常常面临着需要将不同接口或类协调工作的情况&#xff0c;同时还要满足灵活性和可扩展性的需求。为了应对这些挑战&#xff0c;适配器模式和装饰器模式应运而生&#xff0c…

IDEA Debug小技巧 添加减少所查看变量、查看不同线程

问题 IDEA的Debug肯定都用过。它下面显示的变量&#xff0c;有什么门道&#xff1f;可以增加变量、查看线程吗&#xff1f; 答案是&#xff1a;可以。 演示代码 代码如下&#xff1a; package cn.itcast.attempt.threadAttempt.attempt2;public class Test {public static …

GFS分布式文件系统

目录 一、GlusterFS简介 二、GlusterFS特点 1.扩展性和高性能 2.高可用性 3.全局统一命名空间 4.弹性卷管理 5.基于标准协议 三、GlusterFS 术语 1.Brick&#xff08;存储块&#xff09; 2.Volume&#xff08;逻辑卷&#xff09; 3.FUSE 4.VFS 5.Glusterd&#xf…

day48-ajax+SSM分页

AjaxSSM分页 非分页版controller及html&#xff1a; 分页模糊查询controller&#xff1a; Postman测试&#xff08;无网页&#xff09;&#xff1a; 分页网页&#xff1a; 分页网页中添加模糊查询&#xff1a; 分页网页中实现添加功能&#xff1a; &#xff08;1&am…

RabbitMQ 教程 | 第4章 RabbitMQ 进阶

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

【深度学习Week3】ResNet+ResNeXt

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

b 树和 b+树的理解

项目场景&#xff1a; 图灵奖获得者&#xff08;Niklaus Wirth &#xff09;说过&#xff1a; 程序 数据结构 算法&#xff0c; 也就说我们无时无刻 都在和数据结构打交道。 只是作为 Java 开发&#xff0c;由于技术体系的成熟度较高&#xff0c;使得大部分人认为&#xff1…

留存测试数据,Apipost接口用例详解

接口用例可以在不影响源接口数据的情况下对接口添加多个用例&#xff0c;方便测试并保存测试数据。 创建用例 左侧目录选择接口后进入接口用例页面&#xff0c;点击添加用例 在弹出窗口中修改各种参数。如登录接口&#xff0c;可修改用户名为空&#xff0c;并添加断言。 执行…

css滤镜:drop-shadow

一、用法 drop-shadow( offset-x offset-y blur-radius spread-radius color ) offset-x&#xff1a;此参数设置图像的水平偏移。正值将创建右侧的偏移量&#xff0c;负值将创建左侧的偏移量。offset-y&#xff1a;此参数设置图像的垂直偏移。正值创建到底部的偏移量&#xff…

简单版本视频播放服务器V4,layui界面

简单版本视频播放服务器V4 前一个版本内容&#xff0c;可以查看 https://blog.csdn.net/wtt234/article/details/131759154 优化内容&#xff1a; 1.返回列表的优化&#xff0c;优化了原来返回空列表名称的问题 2.前端才有layui优化内容 后端&#xff1a; package mainim…

安科瑞AMC200多回路智能电量采集监控装置在隧道中的应用-安科瑞黄安南

1项目背景 河南安阳林州市某高速公路项目是河南省政府主要打造的一项公路建设项目&#xff0c;该项目全长约70公里&#xff0c;起点位于安阳市内&#xff0c;终点位于林州市县。该项目总投资约60亿元人民币&#xff0c;建设工期预计为3年。 该项目的建设旨在缓解当地交通压力…

为高性能计算构建,由亚马逊云科技Amazon Graviton3E驱动的最新实例正式可用

亚马逊云科技宣布两款基于最新一代自研芯片Amazon Graviton3E的新实例Amazon Elastic Compute Cloud&#xff08;Amazon EC2&#xff09;Hpc7g和Amazon EC2 C7gn正式可用。 其中&#xff0c;Hpc7g实例专为计算和网络密集型高性能计算&#xff08;HPC&#xff09;工作负载而构建…

微信小程序配置上传多个u-upload上传

微信小程序配置上传多个u-upload上传 使用的是uView框架 微信小程序配置上传多个u-upload上传图片 场景需求&#xff1a;根据PC端配置项追加图片配置 小程序根据配置的图片数量&#xff0c;图片名称&#xff0c;进行上传图片 难度在于 我们不知道用户会追加多少个图片配置字段 …

git撤销上一次的commit

一行命令 git reset --soft HEAD^如果在vscode上面&#xff0c;就可以

【Leecode】交替合并字符串- join

题目 给你两个字符串 word1 和 word2 。请你从 word1 开始&#xff0c;通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长&#xff0c;就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 错误1 class Solution:def mergeAlternately(self, w…

C++ 类和对象篇(三) 空类和默认成员函数

目录 一、空类 二、6个默认成员函数 一、空类 1.是什么&#xff1f; 如果一个类中没有显示定义任何成员&#xff0c;简称为空类。 class A {};//一个空类 2.空类中的成员&#xff1f; 空类中真的什么都没有吗&#xff1f; 并不是&#xff0c;任何类在什么都不写时&#xff0c…