当前位置: 首页 > 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;为电网安全与维护带来了重大突破和进步。 一、无人机电力巡检方案是高效巡检的利器 传统的电力巡检方式需要人…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...