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

MongoDB文档--基本概念

阿丹:

        不断拓展自己的技术栈,不断学习新技术。

基本概念

MongoDB中文手册|官方文档中文版 - MongoDB-CN-Manual

 mongdb是文档数据库

MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包括其他文档,数组和文档数组。

文档数据库

        文档数据库是一种数据库模型,它专门用于存储和管理非结构化数据,例如文档、文本和半结构化数据。相比传统的关系型数据库,文档数据库通过将数据组织为灵活的文档集合来提供更高的灵活性和扩展性。

        在文档数据库中,数据以类似于JSON或BSON的文档格式存储,每个文档可以具有不同的结构和字段。这使得文档数据库适用于处理动态数据、半结构化数据或需要频繁变更模式的应用程序。

        另一个重要的概念是文档数据库的查询能力。文档数据库提供了强大且灵活的查询功能,允许开发人员按需检索和操作存储的文档数据。这些查询可以使用结构化查询语言,如MongoDB的查询语言,或通过API进行编程。

        总的来说,文档数据库提供了一种高度灵活的存储和查询解决方案,适合那些需要存储非结构化数据并保持灵活性的应用程序。

使用文档优点:

  • 文档(即对象)对应于许多编程语言中的内置数据类型。

  • 嵌入式文档和数组减少了对昂贵连接的需求。

  • 动态模式支持流畅的多态性。

JSON(JavaScript Object Notation)和BSON(Binary JSON)都是用于表示结构化数据的格式,常用于文档数据库中的文档存储。

JSON是一种轻量级的数据交换格式,易于理解和使用。它使用人类可读的文本格式,采用键值对的形式来表示数据。JSON文档由嵌套的键值对组成,可以包含字符串、数字、布尔值、数组、嵌套的对象等数据类型。JSON格式非常适合简单的数据结构和基本的数据交换。

BSON是JSON的二进制表示形式,旨在提供更高的效率和更紧凑的存储方式。BSON使用二进制编码,以二进制形式表示JSON文档的键值对。与JSON相比,BSON格式存储更加紧凑,减少了存储空间和数据传输的需求,同时提供了更高的读写性能。

BSON支持的数据类型包括字符串、整数、浮点数、日期时间、布尔值、数组、嵌套的文档对象等。它还可以表示特殊类型,如正则表达式、JavaScript代码和二进制数据。BSON还提供了对数据类型的扩展,以支持更复杂的数据结构和功能,例如时间戳、最小、最大值等。

由于BSON的二进制表示形式,它在存储和传输数据时更加高效,并且能够更好地适应文档数据库的要求。因此,BSON是许多文档数据库(如MongoDB)中常用的文档存储格式。

下面是一个bson格式的示例

\x16\x00\x00\x00                          // 整个文档的大小
\x02                                      // 数据类型为字符串
name\x00                                 // 字段名
\x0C\x00\x00\x00John\x00        // 字段值为字符串 "John"
\x10                                      // 数据类型为整数
age\x00                                   // 字段名
\x1E\x00\x00\x00                          // 字段值为整数 30
\x00                                      // 数据类型为结束符

 集合/视图/按需实例化视图

MongoDB将文档存储在集合中。集合类似于关系数据库中的表。

除集合外,MongoDB还支持:

  • 只读视图(从MongoDB 3.4开始)

  • 按需实例化视图(从MongoDB 4.2开始)。

mongdb中的集合

数据库和集合 - MongoDB-CN-Manual

在MongoDB中,集合是文档的组,类似于关系数据库中的表。集合存在于数据库中,集合没有固定的结构,这意味着集合内的文档可以有不同的字段。

集合有以下主要特点:

  1. 集合存在于数据库中,一个数据库可以有多个集合。
  2. 集合类似于关系数据库中的表,但集合没有固定的结构。不同的文档可以有不同的字段。
  3. 集合中的每个文档都有一个主键_id来唯一标识。
  4. 集合可以通过名称来标识,当首次存储文档时会自动创建集合。
  5. 一个集合可以存储任意多个文档。
  6. 集合不会强制执行模式(schema),所以同一个集合中的文档可以有不同的字段。
  7. 集合会继承数据库的权限管理。

mongdb中的只读视图

Views — MongoDB Manual

 只读视图的使用业务场景

  1. 数据隔离:在某些情况下,我们需要将不同的用户或应用程序隔离开来,让他们只能访问自己需要的数据,而不能修改或删除其他人的数据。只读视图可以帮助我们实现数据隔离,保护数据的安全性和完整性。
  2. 数据审计:只读视图可以用于数据审计,即对数据进行审查和验证。通过只读视图,我们可以方便地查看数据,而不能修改或删除数据,确保数据的完整性和准确性。
  3. 数据共享:只读视图也可以用于数据共享,让不同的用户或应用程序共享数据,但不允许他们修改或删除数据。这样,我们可以确保数据的安全性和完整性,同时让更多的人能够方便地使用数据。

mongdb中的按需实例化视图

又称按需式物化视图,是MongoDB4.2最强大的新增功能之一

按需实例化视图是在MongoDB中一种特殊的只读集合,它会根据用户的查询需求,动态地实例化视图。与传统的只读视图不同,按需实例化视图不会提前创建视图,而是在每次查询时实时创建,并根据查询条件过滤数据。

按需实例化视图可以有效地减少存储空间和计算资源的使用,因为只有在需要查询数据时才会创建视图,并过滤出符合条件的数据。此外,按需实例化视图还可以提高查询性能,因为它们不会受到固定视图所带来的限制,可以更灵活地过滤数据。

在MongoDB中,按需实例化视图可以通过使用$merge阶段来创建。$merge阶段可以将管道结果的集合合并到现有集合中,而不是完全替换集合。这个特性使得按需实例化视图成为可能。通过在管道中添加$merge阶段,我们可以将聚合结果写入到现有集合中,并在需要时动态地实例化视图。

按需实例化视图在某些情况下非常有用,例如当我们需要动态地过滤数据,并根据查询条件实时生成视图时。通过使用按需实例化视图,我们可以更加灵活地处理数据,并确保数据的安全性和完整性。

水平拓展

MongoDB提供水平可伸缩性作为其_核心_ 功能的一部分:

  • 分片将数据分布在一个集群的机器上。

  • 从3.4开始,MongoDB支持基于分片键创建数据区域。在平衡群集中,MongoDB仅将区域覆盖的读写定向到区域内的那些分片。有关 更多信息,请参见区域章节。

支持多种存储引擎

MongoDB支持多个存储引擎:

  • WiredTiger存储引擎(包括对静态加密的支持 )

  • 内存存储引擎。

另外,MongoDB提供可插拔的存储引擎API,允许第三方为MongoDB开发存储引擎。

← MongoDB手册内容

原文链接:Introduction to MongoDB — MongoDB Manual

使用场景

 MongoDB是一种文档型数据库,具有高性能、高伸缩性和易用性等特点,适用于多种场景。以下是一些MongoDB的使用场景:

  1. 实时数据分析:MongoDB可以快速处理大量数据,并提供实时数据分析功能,适用于网络分析、业务智能、市场分析等场景。
  2. 游戏开发:MongoDB适合存储游戏用户信息、装备、积分等数据,并提供强大的查询和更新功能,提高游戏开发效率。
  3. 物流管理:MongoDB可以存储订单信息、订单状态、物流信息等数据,并提供灵活的查询和更新功能,帮助物流企业提高管理效率。
  4. 社交网络:MongoDB适合存储用户信息、朋友圈信息、地理位置信息等数据,并提供了强大的查询和数据分析功能,适用于社交网络应用。
  5. 物联网:MongoDB可以存储智能设备信息、设备汇报的日志信息等数据,并提供了实时查询和分析功能,适用于物联网应用。
  6. 视频直播:MongoDB可以存储用户信息、礼物信息等数据,并提供了高伸缩性和实时查询功能,适用于视频直播应用。

总之,MongoDB适用于需要处理大量数据、需要高伸缩性和实时查询的场景,可以提供高效的数据存储、查询和分析功能,帮助企业提高业务效率和竞争力。

mongdb的使用原因

MongoDB之所以被广泛使用,是因为它具有以下优点:

  1. 文档型数据库结构:MongoDB采用文档型数据库结构,可以存储各种类型的数据,如文本、数字、日期、二进制数据等,而且数据存储不需要固定的结构,可以灵活地插入和更新数据。
  2. 高性能:MongoDB使用了内存映射文件的方式,将数据存储在内存中,提高了读写速度和性能。
  3. 高扩展性:MongoDB支持分片集群,可以将数据分布在多个节点上,提高系统的扩展性和可靠性。
  4. 查询语言丰富:MongoDB支持丰富的查询语言,可以轻松地查询和过滤数据。
  5. 易于使用:MongoDB提供了丰富的的主流客户端库和语言驱动程序,可以方便地与各种应用程序进行集成。
  6. 社区支持:MongoDB拥有一个活跃的社区,提供了大量的的问题解决方案和工具,使得开发人员可以更加轻松地解决技术问题。

综上所述,MongoDB具有文档型数据库结构、高性能、高扩展性、查询语言丰富、易于使用和社区支持等优点,使得它成为一种广泛使用的数据库。

mongdb的同类产品对比

MongoDB与其他数据库产品相比,具有以下特点:

  1. 文档型数据库结构:MongoDB采用文档型数据库结构,可以存储各种类型的数据,如文本、数字、日期、二进制数据等,而且数据存储不需要固定的结构,可以灵活地插入和更新数据。
  2. 高性能:MongoDB使用了内存映射文件的方式,将数据存储在内存中,提高了读写速度和性能。
  3. 高扩展性:MongoDB支持分片集群,可以将数据分布在多个节点上,提高系统的扩展性和可靠性。
  4. 查询语言丰富:MongoDB支持丰富的查询语言,可以轻松地查询和过滤数据。
  5. 易于使用:MongoDB提供了丰富的主流客户端库和语言驱动程序,可以方便地与各种应用程序进行集成。

相比其他数据库产品,MongoDB在文档型数据库结构、高性能、高扩展性、查询语言丰富、易于使用等方面具有优势。但是,每个数据库产品都有其适用的场景和优势,需要根据具体的应用需求来选择最合适的数据库产品。

Cassandra,CouchDB,Redis,Riak,Hbase同类型产品

Cassandra、CouchDB、Redis、Riak和HBase都是流行的数据库产品,每个产品都有其自己的特点和优缺点。

以下是对这些产品与MongoDB的对比和优缺点的简要概述:

  1. Cassandra: Cassandra是高度可扩展的,能够处理大规模数据,并提供了强大的写入和读取性能。它的分布式特性使其能够轻松地跨多个节点进行数据复制和故障恢复。但是,Cassandra的使用相对复杂,需要一定的技术水平。
  2. CouchDB: CouchDB是一个高度可扩展的数据库,具有良好的容错性和可靠性。它使用文档存储数据,并支持全文搜索和附件处理。CouchDB的使用相对简单,但是它的性能相对较差,可能不适合高负载应用。
  3. Redis: Redis是一个内存数据库,具有非常高的读写性能和快速的数据访问速度。它支持多种数据结构,如字符串、哈希、列表、集合和有序集合。但是,Redis的存储容量受到内存限制,不适合存储大量数据。
  4. Riak: Riak是一个高度可扩展的分布式数据库,能够处理大规模数据。它具有良好的容错性和可靠性,并支持多种数据类型和查询语言。Riak的使用相对简单,但是它的性能相对较差,可能不适合高负载应用。
  5. HBase: HBase是一个分布式键值存储数据库,具有高性能和可扩展性。它能够处理大量数据,并支持多种数据类型和查询语言。但是,HBase的使用相对复杂,需要一定的技术水平。

相比之下,MongoDB具有文档型数据库结构、高性能、高扩展性、查询语言丰富、易于使用等优点。但是,每个数据库产品都有其适用的场景和优势,需要根据具体的应用需求来选择最合适的数据库产品。

相关文章:

MongoDB文档--基本概念

阿丹: 不断拓展自己的技术栈,不断学习新技术。 基本概念 MongoDB中文手册|官方文档中文版 - MongoDB-CN-Manual mongdb是文档数据库 MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包…...

【TypeScript】TS入门及基础学习(一)

【TypeScript】TS入门及基础学习(一) 【TypeScript】TS入门及基础学习(一)一、前言二、基本概念1.强类型语言和弱类型语言2.动态语言和静态语言 三、TypeScript与JavaScript的区别四、环境搭建及演练准备4.1 安装到本地4.2 在线运…...

Dockerfile构建LNMP镜像(yum方式)

目录 Dockerfile构建LNMP镜像 1、建立工作目录 2、编写Dockerfile文件 3、构建镜像 4、测试容器 5、浏览器访问测试: Dockerfile构建LNMP镜像 1、建立工作目录 [roothuyang1 ~]# mkdir lnmp/ [roothuyang1 ~]# cd lnmp/ 2、编写Dockerfile文件 [roothuyang1 …...

Flink Windows(窗口)详解

Windows(窗口) Windows是流计算的核心。Windows将流分成有限大小的“buckets”,我们可以在其上应用聚合计算(ProcessWindowFunction,ReduceFunction,AggregateFunction或FoldFunction)等。在Fl…...

AssetBundle学习

官方文档:AssetBundle 工作流程 - Unity 手册 (unity3d.com) 之前写的博客:AssetBundle学习_zaizai1007的博客-CSDN博客 使用流程图: 1,指定资源的AssetBundle属性 (xxxa/xxx)这里xxxa会生成目录&…...

CompletableFuture原理与实践

文章目录 1 为何需要并行加载2 并行加载的实现方式2.1 同步模型2.2 NIO异步模型2.3 为什么会选择CompletableFuture? 3 CompletableFuture使用与原理3.1 CompletableFuture的背景和定义3.1.1 CompletableFuture解决的问题3.1.2 CompletableFuture的定义 3.2 Complet…...

8.3 作业

整理思维导图 2. 递归实现&#xff0c;输入一个数&#xff0c;输出这个数的每一位 #include <myhead.h> void fun(int t) {if(t 0) return;fun(t/10);printf("%d\n",t%10); } int main(int argc,const char *argv[]) {int t1623809; fun(t);return 0; } 3.递…...

c# COM组件原理

COM&#xff08;Component Object Model&#xff09;是一种微软的软件组件技术&#xff0c;用于实现软件组件之间的互操作性。它是一种二进制接口标准&#xff0c;允许不同的软件组件在不同的进程中进行通信。COM组件可以用多种编程语言编写&#xff0c;并且可以在多个应用程序…...

Java POI 百万规模数据的导入和导出

目录 1、百万数据导入1.1 需求分析1.2 思路分析1.3 代码实现1.3.1 步骤分析1.3.2 自定义处理器1.3.3 自定义解析1.3.4 测试 2、百万数据导出2.1、概述2.2、解决方案分析2.3、原理分析2.4、百万数据的导出2.4.1、模拟数据2.4.2、思路分析2.4.3、代码实现2.4.4、测试结果 1、百万…...

如何快速用PHP取短信验证码

要用PHP获取短信验证码&#xff0c;通常需要连接到一个短信服务提供商的API&#xff0c;并通过该API发送请求来获取验证码。由于不同的短信服务提供商可能具有不同的API和授权方式&#xff0c;我将以一个简单的示例介绍如何使用Go语言来获取短信验证码。 在这个示例中&#xff…...

CloudStack 的 AsyncJobManagerImpl

在 CloudStack 的 AsyncJobManagerImpl 类中&#xff0c;下列方法的作用如下&#xff1a; getConfigComponentName(): 返回配置组件的名称。 getConfigKeys(): 返回与异步任务管理器相关的配置键列表。 getAsyncJob(): 根据异步任务的 ID 获取相应的异步任务对象。 findInst…...

OAuth机制_web站点接入微软azure账号进行三方登录

文章目录 ⭐前言⭐微软三方登录流程&#x1f496; web站点获取微软账号流程&#x1f496; node封装微软登录接口&#x1f496; webapp 自定义code换token&#x1f496; 调用 Microsoft Graph API&#x1f496; 前端唤醒authlink进行登录回调逻辑 ⭐结束 ⭐前言 大家好&#xf…...

Linux ALSA音频工具aplay、arecord、amixer的使用方法

ALSA 是Advanced Linux Sound Architecture的缩写&#xff0c;先进的Linux音频架构&#xff0c;为Linux操作系统提供音频和MIDI功能。 aplay命令 aplay是播放命令。 rootimx6ul7d:~# aplay -h Usage: aplay [OPTION]... [FILE]...-h, --help help--version …...

编写一个最简单的Linux服务端和客户端程序

2023年8月3日&#xff0c;周四下午 这篇文章我从下午开始写了几个小时&#xff0c; 这篇文件基本总结了我今天学到的知识&#xff0c; 在写这篇文章的过程中灵感不断涌现、想明白了很多知识点&#xff0c;非常酣畅淋漓。 什么叫做深度学习&#xff1f;这就是深度学习&#…...

openKylin顺利加入RISC-V 基金会,推动架构芯片与操作系统协同发展

日前开放麒麟openKylin宣布&#xff0c;正式加入RISC-V基金会&#xff0c;由此成为其产业联盟成员。 公开资料显示&#xff0c;ISC-V是由加州大学伯克利分校研究团队在 2010年推出的一个开源指令集架构(ISA)。并且RISC-V拥有免费、高效、简洁和开放等特性qlbrsb。 作为新生的…...

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)【二】

文章目录 SSM--基础环境搭建【二】项目介绍项目功能/界面● SSM 整合项目界面 项目全局配置web.xmlSpringMVC 配置 SSM–基础环境搭建【二】 项目介绍 项目功能/界面 ● SSM 整合项目界面 项目全局配置web.xml 配置furns_ssm\src\main\webapp\WEB-INF\web.xml , 和项目全局…...

出现一次的数字(其他数字出现三次,两次)

位运算的知识点&#xff1a; 异或运算具有以下几个重要性质 交换律&#xff1a;a ^ b b ^ a 结合律&#xff1a;a ^ (b ^ c) (a ^ b) ^ c 任何数与0异或等于它本身&#xff1a;a ^ 0 a 任何数与自身异或等于0&#xff1a;a ^ a 0 对于数组中所有元素进行异或运算&#xf…...

Rust- 智能指针

Smart pointers A smart pointer is a data structure that not only acts like a pointer but provides additional functionality. This “smartness” comes from the fact that smart pointers encapsulate additional logical or semantic rules, which are automaticall…...

什么是微服务

微服务的架构特征&#xff1a; 单一职责&#xff1a;微服务拆分粒度更小&#xff0c;每一个服务都对应唯一的业务能力&#xff0c;做到单一职责自治&#xff1a;团队独立、技术独立、数据独立&#xff0c;独立部署和交付面向服务&#xff1a;服务提供统一标准的接口&#xff0…...

无人机电力巡检方案在电网安全与维护中的应用

目前&#xff0c;无人机技术已经在各行各业都有广泛的应用&#xff0c;其中之一就是在电力巡检中的应用。无人机电力巡检方案以其高效、安全、精准的特点&#xff0c;为电网安全与维护带来了重大突破和进步。 一、无人机电力巡检方案是高效巡检的利器 传统的电力巡检方式需要人…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

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

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...