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

news2024/11/17 0:41:35

一、基本概念

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"]
}

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

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

相关文章

Spyder无法载入(load)或者闪退问题

在Anaconda prompt中直接输入spyder,报错如下 Traceback (most recent call last):File "C:\Users\user\.conda\envs\KB\Scripts\spyder-script.py", line 10, in sys.exit(main())File "C:\Users\user\.conda\envs\KB\lib\site-packages\spyder\a…

baseline SE SP YI是什么?

SE、SP和YI是评估分类模型性能时常用的几个统计指标,特别是在医学影像处理、疾病诊断等领域,这些指标帮助了解模型对于正负类样本的识别能力。 SE (Sensitivity),也称为真正率(True Positive Rate, TPR)或召回率&#…

泛型(java学习)

目录 1.泛型介绍: 2.泛型的好处: 3.泛型的语法 4.泛型的细节 5.自定义泛型 6.自定义泛型接口 8.泛型的继承和通配符 1.泛型介绍: 1)泛型又称参数化类型,解决数据类型的安全性问题。 2)在类声明或实例…

5.3 用栈翻转数组,动态规划求斐波那契数列

5.3 用栈翻转数组,动态规划求斐波那契数列 1. 用栈翻转数组 assume cs:code,ds:data,ss:stack data segmentarr dw 1111h,2222h,3333h,4444h,5555h,6666h,7777h,8888hres db 800 dup(0) data endsstack segmentdb 100 dup(0) stack endscode segmentstart:mov ax,…

计算机视觉入门:开启图像理解之旅

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

【算法篇】三道题理解算法思想——认识BFS

BFS(宽搜) 宽度优先遍历和深度优先遍历组成了大家熟悉的搜索算法,这两种算法也是蓝桥杯之类竞赛题的常考思想,正巧马上蓝桥杯临近,博主也是刷了很多BFS相关的题型,在这篇文章中会从力扣上选取三道简单的宽搜…

小象超市(原美团买菜) 的大屏图表

文章目录 概要技术细节技术名词解释小结 概要 20203年12月1日,美团旗下自营零售品牌“美团买菜”升级为全新品牌“小象超市”。 ,“小象超市”坚持美团自营零售模式,通过在社区设立的集存储、分拣、配送为一体的便民服务站,为社区…

关于16:9和4:3的有关知识,看这篇文章就差不多了

序言 在你拍照或录制视频之前,你需要考虑使用哪个纵横比。最常见的两种纵横比是16:9和4:3,但哪一种最适合你? 16:9的纵横比最适合视频,因为宽度比高度宽78%,这使你更容易在水平方向上适应更多画面,同时优化视频以适应现代屏幕。 同时,4:3的纵横比更适合摄影,因为宽度…

书籍《笔记的方法》读后感

读完《笔记的方法》有几周的时间,书里有些记录的内容,觉得非常有价值的,自己的观点,当下读书,其实并没有那么高大尚,就是存粹陶冶下情操,读书还是有一定作用的,毕竟看书只能慢慢来&a…

【PDF-XSS攻击】Java项目-上传文件-解决PDF文件XSS攻击

文章目录 背景解决pdfbox依赖控制器代码PdfUtils工具类 验证最后源码参考 背景 上传xss-pdf造成存储型xss因为在浏览器直接预览的PDF,而不是预览,所以安全部门认为会有XSS漏洞 解决 安全部门修复建议 1、根据白名单的标签和属性对数据进行过滤&#…

C++后端程序员如何在缺乏相关外包项目中寻找赚取外快的途径

作为一位专业的C后端程序员,你拥有扎实的技术功底和丰富的编程经验,然而在寻求外包项目的道路上,可能时常会发现市场上的项目并不都与C直接相关。但这并不意味着你就无法利用自己的技能来获取额外收入。本文将为你揭示一些即使在当前环境下&a…

力扣热题100_链表_138_随机链表的复制

文章目录 题目链接解题思路解题代码 题目链接 138. 随机链表的复制 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&a…

【算法】动态规划练习(一)

目录 1137. 第 N 个泰波那契数 分析 代码 面试题 08.01. 三步问题 分析 代码 746. 使用最小花费爬楼梯 分析 代码 泰波那契序列 Tn 定义如下: T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n,请返回第 n 个泰波…

软件测试人员如何避免成为“背锅侠”

作为一名软件测试工程师,我们的角色可以算是“战场上的后勤”,战役的胜败和所有团队人员都息息相关。 但是难免碰到战役失败后,很多团队互相推脱的局面,而测试人员就是所有团队中的弱势群体,自然是首当其冲的背锅侠&a…

34.Python从入门到精通—Python3 正则表达式检索和替换

34.从入门到精通:Python3 正则表达式检索和替换 repl 参数是一个函数 正则表达式对象 正则表达式修饰符 - 可选标志 正则表达式模式* 正则表达式实例 检索和替换repl 参数是一个函数正则表达式对象正则表达式修饰符 - 可选标志正则表达式模式*正则表达式实例 检索和…

JAVA并发编程(一)

JAVA并发编程(一) 1.1JAVA线程API 1.1.1currentThread package com.lisus2000.thread;/** * 当前线程 * */ public class Test07 extends Thread {public Test07() {System.out.println("new Test07()......" Thread.currentThread().getNa…

全网短剧搜索前端源码开源分享可改自己的接口

全网短剧搜索前端源码 内含7000短剧资源(不支持在线播放) 源码全开源,可以修改成自己的接口 178、226、347行修改 源码免费下载地址抄笔记 (chaobiji.cn)https://chaobiji.cn/

HarmonyOS实战开发-如何实现蓝牙设备发现、配对、取消配对功能。

介绍 蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接。本示例通过ohos.bluetooth 接口实现蓝牙设备发现、配对、取消配对功能。实现效果如下&#xff1a…

小秦网站部署上线

叮~您有一份消息,请注意查收! 小秦个人网站终于上线了: 网站主要有:免费听歌、看小姐姐、AI女友、留言板等功能,建议收藏、收藏、再收藏、重要事情说三遍!!! 网站&#x…

【Angular性能优化】项目8版本加载速度缓慢、白屏时间、首页渲染性能优化方案

前言 随着业务的代码一点点增加,加上Angular的项目本身就比 vue、react 的重一些,随之而来的启动速度,更改文件后编译速度,以及打包速度也会变慢,于是乎想着优化下我们的项目。 本文章主要说的是 : 打包Angular项目的一些配置,性能优化方面的方案打包后,用户进入页面…