学习 MongoDB:打开强大的数据库技术大门

一、基本概念

MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 语言编写。它旨在为 Web 应用提供可扩展的高性能数据存储解决方案。

相信MySQL我们非常的熟悉,那么MySQL的表结构与MongoDB的文档结构进行类比的话可能更好理解MongoDB。

  • MySQL的数据库(Database)对应于MongoDB的数据库。
  • MySQL的表(Table)对应于MongoDB的集合(Collection)。
  • MySQL的行(Row)对应于MongoDB的文档(Document)。
  • MySQL的列(Column)对应于MongoDB文档中的字段(Field)。

在MongoDB中,数据库(database)、集合(collection)、文档(document)、字段(field)是构成数据存储和管理的核心概念。以下是它们的基本定义和关系:

1.1、数据库(Database):

  • 数据库是MongoDB中的顶层容器,用于存储一组相关联的集合。

  • 每个数据库都有自己的权限和独立的命名空间,可以包含多个集合。

  • 数据库的名称是字符串,可以通过use命令在MongoDB中切换到指定的数据库。

    use mydatabase

1.2、集合(Collection):

  • 集合是MongoDB中的一个文档组,类似于关系型数据库中的表。

  • 集合包含多个文档,每个文档可以有不同的结构,无需事先定义表结构。

  • 集合的名称是字符串,区分大小写。

    db.createCollection("mycollection")

1.3、文档(Document):

  • 文档是MongoDB中的基本数据单元,用于表示数据记录。

  • 文档是一个键值对的有序集合,以BSON(Binary JSON)格式存储。

  • 文档可以包含嵌套文档和数组,支持复杂的数据结构。

    {
    "_id": ObjectId("5f5a8b6d9df1a83a8b1c4a3"),
    "name": "John Doe",
    "age": 30,
    "address": {
    "city": "New York",
    "zipcode": "10001"
    },
    "hobbies": ["reading", "traveling"]
    }

1.4、字段(Field):

  • 字段是文档中的一个键值对,表示文档的属性或属性值。

  • 字段的键是字符串,字段的值可以是各种数据类型,包括字符串、整数、数组、嵌套文档等。

    {
    "name": "John Doe",
    "age": 30,
    "address": {
    "city": "New York",
    "zipcode": "10001"
    },
    "hobbies": ["reading", "traveling"]
    }

二、数据结构

BSON(Binary JSON)是MongoDB使用的二进制数据表示格式,它是一种轻量级、可扩展的数据交换格式。BSON主要用于在MongoDB中存储和传输数据。以下是关于BSON的一些重要特点和使用方式:

  1. 数据类型:
  • BSON支持多种数据类型,包括字符串、整数、浮点数、日期、数组、嵌套文档、ObjectId等。
  • 数据类型的使用使得BSON可以准确地表示MongoDB文档中的各种数据。
  1. 二进制编码:
  • BSON使用二进制格式进行编码,使得数据在存储和传输时更加紧凑和高效。
  • 二进制编码还支持复杂数据类型,如嵌套文档和数组。
  1. ObjectId:
  • ObjectId是BSON的一部分,用于唯一标识MongoDB文档。
  • ObjectId由12字节组成,包括时间戳、机器ID、进程ID和随机数,以保证在分布式系统中的唯一性。
  1. 日期表示:
  • BSON支持日期类型,可以精确表示日期和时间。
  • 日期以UTC时间存储,使得在不同时区之间的数据交换更为方便。
  1. BSON文档结构:
  • BSON文档的基本结构与JSON相似,但包含了更多的数据类型和二进制编码。
  • BSON文档由多个字段组成,每个字段包含键值对,键是字符串,值可以是各种数据类型。
  1. BSON与JSON的关系:
  • BSON可以看作是JSON的二进制扩展,支持JSON的大部分数据类型。
  • BSON的二进制格式比JSON更紧凑,更适合在网络传输和存储中使用。

下面是一个简单的BSON文档的示例,以展示其基本结构:

复制代码
{
   "_id": ObjectId("5f5a8b6d9df1a83a8b1c4a3"),
   "name": "John Doe",
   "age": 30,
   "address": {
       "city": "New York",
       "zipcode": "10001"
   },
   "hobbies": ["reading", "traveling"]
}
相关推荐
再睡一夏就好3 分钟前
【C++闯关笔记】STL:deque与priority_queue的学习和使用
java·数据结构·c++·笔记·学习·
Liu1bo14 分钟前
【MySQL】表的约束
linux·数据库·mysql
蚍蜉撼树谈何易21 分钟前
3.cuda执行模型
学习
胖胖的战士30 分钟前
Mysql 数据库迁移
数据库·mysql
敲代码的嘎仔32 分钟前
JavaWeb零基础学习Day4——Maven
java·开发语言·学习·算法·maven·javaweb·学习方法
遇印记34 分钟前
网络运维学习笔记
数据结构·笔记·学习
czhc11400756631 小时前
LINUX1012 mysql GLIBC安装
数据库·mysql
四谎真好看1 小时前
Java 黑马程序员学习笔记(进阶篇20)
java·笔记·学习·学习笔记
D.....l1 小时前
STM32学习(MCU控制)(GPIO)
stm32·嵌入式硬件·学习
DemonAvenger1 小时前
深入 Redis Hash:从原理到实战,10 年经验的后端工程师带你玩转哈希结构
数据库·redis·性能优化