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

MongoDB 的核心概念(文档、集合、数据库、BSON)是什么?

MongoDB 是一个面向文档的数据库,它的核心概念与传统的关系型数据库(RDBMS)有所不同。以下是它的四个主要核心概念:

  1. 文档 (Document)

    • 定义: 文档是 MongoDB 中的基本数据单元。它类似于关系型数据库中的一行记录,但比行更灵活和强大。
    • 结构: 文档是一组键值对 (key-value pairs)。这些键值对是有序的。
    • 格式: 文档的结构非常类似于 JSON (JavaScript Object Notation)。MongoDB 内部使用 BSON (Binary JSON) 格式来存储文档,BSON 是 JSON 的二进制表示形式,它支持更多的数据类型,并且更易于高效地扫描和编码。
    • 特点:
      • 每个文档都有一个唯一的 _id 字段,它作为文档的主键标识。
      • 文档的字段值可以是各种数据类型,包括字符串、数字、布尔值、数组,甚至可以是嵌套的文档。
      • 同一个集合中的文档可以有不同的结构(字段可以不同、数据类型可以不同),这就是所谓的“无模式”或“灵活模式”。
    • 类比关系型数据库: 类似于关系型数据库中的一行 (Row)
  2. 集合 (Collection)

    • 定义: 集合是 MongoDB 中文档的容器,它是一组相关的文档。
    • 结构: 集合没有强制的结构定义(模式),这意味着一个集合中的文档可以有不同的字段和结构。
    • 特点:
      • 集合存在于数据库中。
      • 你不需要预先创建集合,当你向一个不存在的集合插入第一个文档时,MongoDB 会自动创建该集合。
      • 集合可以包含大量文档,文档的数量没有固定限制。
    • 类比关系型数据库: 类似于关系型数据库中的表 (Table)
  3. 数据库 (Database)

    • 定义: 数据库是 MongoDB 中集合的容器,它是一组相关的集合。
    • 结构: 数据库提供了组织和管理集合的逻辑命名空间。
    • 特点:
      • 一个 MongoDB 实例可以拥有多个数据库。
      • 每个数据库都有自己的一组集合。
      • 权限管理、复制和分片等操作通常在数据库级别进行配置。
    • 类比关系型数据库: 与关系型数据库中的数据库 (Database) 概念是直接对应的。
  4. BSON (Binary JSON)

    • 定义: BSON 是 MongoDB 用于存储文档和进行网络传输的二进制序列化格式。它是 JSON 的超集。
    • 目的:
      • 效率: BSON 设计得比 JSON 更快地解析和扫描。它包含长度前缀,使得跳过不需要的字段或确定文档大小变得容易。
      • 数据类型: BSON 支持比标准 JSON 更多的数据类型,如日期、二进制数据、ObjectId(用于生成唯一的 _id)、正则表达式等。这使得 MongoDB 可以存储更丰富的数据类型而无需特殊处理。
    • 特点: 虽然你在与 MongoDB 交互时(如使用 shell 或驱动程序)看到的数据通常以 JSON 或其变体的形式呈现,但 MongoDB 内部实际存储和处理的是 BSON 格式的数据。

核心概念之间的关系:

可以这样理解它们之间的层次结构:

一个 MongoDB 实例 可以包含多个 数据库 (Database)
每个 数据库 可以包含多个 集合 (Collection)
每个 集合 包含多个 文档 (Document)
每个 文档 是由键值对组成,内部以 BSON 格式存储。

用关系型数据库的类比来说:

  • MongoDB 实例 ≈ 数据库服务器
  • 数据库 ≈ 数据库
  • 集合 ≈ 表
  • 文档 ≈ 行
  • 文档中的键值对 ≈ 列
  • BSON ≈ 数据的内部存储格式(没有直接的 RDBMS 类比,因为它处理的是结构而非扁平的行)

理解这些核心概念是使用 MongoDB 进行数据存储、查询和管理的起点。文档的灵活性和集合的无模式特性是与关系型数据库最显著的区别。

http://www.dtcms.com/a/191510.html

相关文章:

  • “redis 目标计算机积极拒绝,无法连接” 解决方法,每次开机启动redis
  • cursor 学习
  • 通过SMTP协议实现Linux邮件发送配置指南
  • 再来1章linux系列-17 ssh sshd sshd非对称加密(密钥加密)‌SSH对称加密组件/流程
  • 枢轴支压点策略
  • 求助求助,重金酬谢
  • 【AI News | 20250514】每日AI进展
  • 双向长短期记忆网络-BiLSTM
  • git使用的DLL错误
  • QML ComboBox部件的使用
  • MODBUS与PROFIBUS-DP通讯的螺杆空压机控制系统设计与监控实况
  • 【复刻】人工智能技术应用如何影响企业创新(2007-2023年)
  • Step1
  • 海信璀璨505U6真空冰箱闪耀“国家德比”
  • Codeforces Round 996 (Div. 2)
  • Spring 中常见的属性注入方式(XML配置文件)
  • Java从入门到精通 - 方法
  • 欢乐熊大话蓝牙知识1:蓝牙通信全流程拆解:从广播到连接的每一步
  • 在C++中进行套接字编程时,主要使用以下头文件
  • 易学探索助手-项目记录(九)
  • 什么是函数重载?为什么 C 不支持函数重载,而 C++能支持函数重载?
  • 数据 分析
  • primitive创建图像物体
  • new optimizers for dl
  • 【3Ds Max】.ive格式文件的导出与加载
  • CMake入门与实践:现代C++项目的构建利器
  • 怎样将MM模块常用报表设置为ALV默认格式(MB52、MB5B、ME2M、ME1M等)
  • 对抗系统熵增:从被动救火到主动防御的稳定性实战
  • 笔记本/台式机加装PCIe 5.0固态硬盘兼容性与安装方法详解 —— 金士顿Kingston FURY Renegade G5装机指南
  • Python Day25 学习