MongoDB从入门到实战之MongoDB快速入门
前言
上一章节主要概述了MongoDB的优劣势、应用场景和发展史。这一章节将快速的概述一下MongoDB的基本概念,带领大家快速入门MongoDB这个文档型的NoSQL数据库。
MongoDB从入门到实战的相关教程
MongoDB从入门到实战之Docker快速安装MongoDB
MongoDB从入门到实战之MongoDB工作常用操作命令
MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(1)-后端项目框架搭建
MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(2)-系统数据集合设计
MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(3)-MongoDB连接和基本操作封装
MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(4)-Blazor快速入门
MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(5)-Blazor前端框架搭建
MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(6)-用户登录注册模块开发
MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(7)-用户JWT授权验证
MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(8)-TodoList增删改查功能开发
MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(9)-Docker打包并部署
MongoDB是什么?
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似Json的Bson格式,因此可以存储比较复杂的数据类型。
MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。并且MongoDB-4.2版本开始已经支持分布式事务功能。
简而言之的话就是:MongoDB是一个文档型的NoSQL数据库,用于构建高并发、高可用和高扩展的互联网应用程序。
MongoDB概念解析
无论我们学习什么数据库都应该先了解对应数据库的基本概念,在MongoDB中基本的概念是文档、集合、数据库,下面我们挨个介绍。
MongoDB和RDBMS术语概念对比
虽然 MongoDB 与传统的 RDBMS 共享一些相同的术语,但其他一些是 NoSQL 数据库所独有的。为了帮助了解它们的分别,下表将 RDBMS 使用的术语与 MongoDB 使用的术语进行比较:
RDBMS术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 嵌入式文档 | 表连接,MongoDB不支持表连接只支持嵌入式文档 |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键(默认键 _id 由 MongoDB 提供) |
MongoDB文档(Documment)
概述:
文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是MongoDB非常突出的特点。
- MongoDB 的文档可以理解为关系型数据库(Mysql)的一行记录
- MongoDB 将数据记录为 BSON 格式的文档
- BSON 是 JSON 文档的二进制表示,但它支持的数据类型更加丰富
MongoDB文档由字段和值对组成,并具有以下结构:
{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}
MongoDB Bson格式介绍
Bson是一种类Json的一种二进制形式的存储格式,简称Binary Json,它和Json一样,支持内嵌的文档对象和数组对象,但是Bson有Json没有的一些数据类型,如Date和BinData类型。
Bson可以做为网络数据交换的一种存储形式,这个有点类似于Google的Protocol Buffer,但是Bson是一种schema-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想,Bson有三个特点:轻量性、可遍历性、高效性,
{“hello":"world"} 这是一个Bson的例子,其中"hello"是key name,它一般是cstring类型,字节表示是cstring::= (byte*) "/x00" ,其中*表示零个或多个byte字节,/x00表示结束符;后面的"world"是value值,它的类型一般是string,double,array,binarydata等类型。
JSON vs BSON:
JSON的局限性,比如它只有null、布尔、数字、字符串、数组和对象这几种数据类型,没有日期类型,只有一种数字类型,无法区分浮点数和整数,也没法表示正则表达式或者函数。BSON是一种类JSON的二进制形式的存储格式,Binary JSON,支持内嵌的文档对象和数组对象,如Date和BinData类型,MongoDB使用BSON做为文档数据存储和网络传输格式。
MongoDB数据类型
下表为MongoDB中常用的一些数据类型:
详情介绍:参见BSON Types:https://www.docs4dev.com/docs/zh/mongodb/v3.6/reference/reference-bson-types.html
数据类型 | 描述 |
---|---|
String | 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。 |
Integer | 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。 |
Boolean | 布尔值。用于存储布尔值(真/假)。 |
Double | 双精度浮点值。用于存储浮点值。 |
Min/Max keys | 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。 |
Arrays | 用于将数组或列表或多个值存储为一个键。 |
Timestamp | 时间戳。记录文档修改或添加的具体时间。 |
Object | 用于内嵌文档。 |
Null | 用于创建空值。 |
Symbol | 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。 |
Date | 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 |
Object ID | 对象 ID。用于创建文档的 ID。 |
Binary Data | 二进制数据。用于存储二进制数据。 |
Code | 代码类型。用于在文档中存储 JavaScript 代码。 |
Regular expression | 正则表达式类型。用于存储正则表达式。 |
下面简单介绍一下其中几个比较重要的类型:
ObjectId
每次插入一条数据系统都会自动插入一个_id键,键值不可以重复,它可以是任何类型的,也可以手动的插入,默认情况下它的数据类型是ObjectId,由于MongoDB在设计之初就是用作分布式数据库,所以使用ObjectId可以避免不同数据库中_id的重复(如果使用自增的方式在分布式系统中就会出现重复的_id的值)。
ObjectId使用12字节的存储空间,每个字节可以存储两个十六进制数字,所以一共可以存储24个十六进制数字组成的字符串,在这24个字符串中,前8位表示时间戳,接下来6位是一个机器码,接下来4位表示进程id,最后6位表示计数器。
601e2b6b aa203c c89f 2d31aa
↑ ↑ ↑ ↑
时间戳 机器码 进程id 计数器
String
BSON 字符串为 UTF-8.通常,在对 BSON 进行序列化和反序列化时,每种编程语言的驱动程序都会从该语言的字符串格式转换为 UTF-8.这样就可以轻松地将大多数国际字符存储在 BSON 字符串中。 [1]此外,MongoDB $regex查询在正则表达式字符串中支持 UTF-8。
Timestamps
BSON 具有特殊的时间戳类型供内部 MongoDB 使用,并且不与常规Date类型关联。此内部时间戳记类型是 64 位值,其中:
- 最重要的 32 位是time_t值(自 Unix 时代以来的秒数),最低有效 32 位是在给定的秒内进行操作的ordinal增量。
- 尽管 BSON 格式为低位字节序,因此首先存储了最低有效位,但是mongod实例在所有平台上始终将time_t值先于ordinal值进行比较,无论字节序如何。在单个mongod实例中,时间戳记值始终是唯一的。
- 在复制中,oplog有一个ts字段。该字段中的值反映了使用 BSON 时间戳值的操作时间。
Date
BSON Date 是一个 64 位整数,代表自 Unix 纪元(1970 年 1 月 1 日)以来的毫秒数。这导致可以 traceback 到过去和 Future 约 2.9 亿年的日期范围。
MongoDB索引种类:
- _id索引:绝大多数集合默认建立的索引;对于每个插入的数据,mongodb都会自动生成一条唯一的_id字段。
- 单键索引:不自动创建,值单一,例如字符串,数字或者日期。
- 多键索引:不自动创建,值有多个,如数组,与单键索引创建形式相同,区别在于字段的值。
- 复合索引:查询条件不只一个时,需要建立复合索引。
- 过期索引TTL:是在一段时间后会过期的索引,索引过期后,相应的数据会删除(不仅仅是索引删除,还有数据);适用场景:在一段时间之后会时效的数据,比如用户的登陆信息、存储的日志;建立方法,db.test.ensureIndex({time:1},{expireAfterSeconds:10})秒数。其限制:存储在过期索引字段的值必须是指定的时间类型(ISODate或者其数据,不能使用时间戳,否则不能被自动删除);指定ISODate数组,则按照最小的时间进行删除;过期索引不能是复合索引;删除时间不精确(MongoDB默认60s执行一个删除过程,删除本身也需要时间)
- 全文索引:对字符串与字符串数组创建全文课搜索的索引。
- 地理位置索引:将一些点的位置存储在MongoDB中,创建索引后,可以按照位置来查找其他点。
MongoDB GUI可视化工具
俗话说工欲善其事,必先利其器。选择一款高效的GUI可视化客户端管理工具,对于我们的日常开发效率都有大大的提升。下面推荐几款比较好用的MongoDB GUI可视化管理工具!
Navicat for MongoDB
官网下载地址:http://www.navicat.com.cn/download/navicat-for-mongodb
在 Navicat for MongoDB 使用文档:https://www.navicat.com.cn/company/aboutus/blog/257-working-with-documents-in-navicat-for-mongodb
老牌的数据库管理工具,支持多种数据库的集成,已集成 MongoDB 类型,属于付费型管理工具。好处是用会了一个 DB 版的 Navicat,所有 DB 版都会很顺手,维持一套操作习惯,如果再肌肉记忆一些快捷键,会更加高效。
Robo 3T (Robomong)
官网下载地址:https://robomongo.org/
Robo 3T 前身是 Robomongo,后被 3T 公司收购,是一款免费开源的 GUI 管理工具。支持 MongoDB 4.0+,轻量级 GUI,支持语法填充等等。适用于 Windows,macOS 和 Linux 系统。
Studio 3T
超过 100,000 的开发人员和数据库管理员使用 Studio 3T 作为 MongoDB GUI 的首选。Studio 3T 属于收费工具,30 天的免费试用期,Studio 3T 具有更多更强大的功能并提供企业支持服务,支持副本集、独立主机和分片集群连接,支持导入导出,SQL 查询,语法填充,支持 MongoDB 4.0+ 等等。适用于 Windows,macOS 和 Linux。
MongoDB Compass
官网下载地址:https://www.mongodb.com/try/download/compass
官网教程:https://www.mongodb.com/docs/manual/reference/connection-string/
MongoDB 亲儿子系列,官方自己推出的 GUI 可视化管理工具,功能有限。免费简洁,不支持 SQL 查询,支持性能监控。适用于 Windows,macOS 和 Linux 系统。
NoSQLBooster for MongoDB
NoSQLBooster for MongoDB(以前叫 MongoBooster)风格有点类似于 EasyUI,支持副本集,独立主机和分片群集连接,提供了全面的服务器监控工具、fluent 查询构建器、SQL 查询、查询代码、任务调度、ESNext 支持和真正的智能感知体验等。提供了付费和免费两种版本。适用于 Windows,macOS 和 Linux 系统。
NoSQL Manager for MongoDB Professional
从 2.2 到 4.4 全面支持 MongoDB 和 MongoDB Enterprise 版本。功能齐全的 MongoDB UI Shell。具有代码自动完成功能,语法突出显示和提示。支持副本集,独立主机和分片群集连接,导入导出,简单查看和管理所有 MongoDB 对象:数据库,集合,视图,索引,用户,角色和功能等等。提供了付费和免费两种版本。
参考文章
MongoDB从入门到实战之MongoDB快速入门的更多相关文章
- (18/24) webpack实战技巧:快速入门webpack模块化配置
搞个小例子便于学习: 具体操作为把上节中的webpack.config.js中的entry入口文件进行模块化设置,单独拿出来制作成一个模块. 1.在根目录新建一个config文件,然后新建webpac ...
- 前端学习 node 快速入门 系列 —— 报名系统 - [express]
其他章节请看: 前端学习 node 快速入门 系列 报名系统 - [express] 最简单的报名系统: 只有两个页面 人员信息列表页:展示已报名的人员信息列表.里面有一个报名按钮,点击按钮则会跳转到 ...
- c语言快速入门3
如果你想快速入门计算机,可以参考我的上一篇帖子,先了解一些必备的软知识,然后再来进行语言的快速入门 计算机入门基础知识 c语言快速入门1 c语言快速入门2 3.4.1 字符和字符串 字符:'' 单个 ...
- c语言快速入门2
如果你想快速入门计算机,可以参考我的上一篇帖子,先了解一些必备的软知识,然后再来进行语言的快速入门 计算机入门基础知识 c语言快速入门1 1.1.12 函数的概念 函数的定义:c语言的基本单位,c语言 ...
- Linux快速入门01-基础概念
4年多前,刚到上海时报过一个关于Oracle的培训班,在那里接触到了Linux,不过一直都没真正去试着使用它.现在经过慢慢的成长,越来越觉得,Linux是每一个服务端工程师必须掌握的系统,即使是现在最 ...
- Linux快速入门02-文件系统管理
继续进入Linux文件系统的学习,加油,早日突破MS压在自己身上的那道束缚. Linux系列文章 快速入门系列--Linux--01基础概念 快速入门系列--Linux--02文件系统管理 快速入门系 ...
- Linux快速入门03-系统管理
这部分将涉及常用的各类linux命令和一些系统高级管理特性,尤其是shell script的创建,这部分在系统自动化运维时会很有作用. Linux系列文章 快速入门系列--Linux--01基础概念 ...
- Linux快速入门04-扩展知识
这部分是快速学习的最后一部分知识,其中最重要的内容就是源码的打包和软件的安装的学习,由于个人的Linux学习目的就是自己能在阿里云Ubuntu上搭建一个简单的nodejs发布环境. Linux系列文章 ...
- Html与CSS快速入门01-基础概念
Web前端技术一直是自己的薄弱环节,经常为了调节一个简单的样式花费大量的时间.最近趁着在做前端部分的开发,果断把这部分知识成体系的恶补一下.内容相对都比较简单,很类似工具手册的学习,但目标是熟练掌握. ...
- Html与CSS快速入门02-HTML基础应用
这部分是html细节知识的学习. 快速入门系列--HTML-01简介 快速入门系列--HTML-02基础元素 快速入门系列--HTML-03高级元素和布局 快速入门系列--HTML-04进阶概念 示例 ...
随机推荐
- HDU1561 The more, The Better(树形背包)
通过这道题对树形背包理解更深一步...... 有几个地方需要注意: 1.本题数据结构为森林,需增加一个超根作为根节点,M+=1(后面解释). 2.本题有拓扑序的限制,通过vector建成的一棵树中,必 ...
- CQOI2015任务查询系统
题目链接 主席树. 把区间的影响挂在左端点与右端点,建树时顺便对应的插入与删除. 维护一段值域区间的和与数字个数,查询时要注意与第k大的数相同的数可能有很多. 复杂度O(nlogn) #include ...
- 2.CBV和类视图as_view源码解析
一.FBV和CBV # 视图基于函数开发 FBV: function.base.views # 视图基于类开发 CBV: class .base .views #Python是一个面向对象的编程语言, ...
- 微服务 Zipkin 链路追踪原理(图文详解)
一个看起来很简单的应用,可能需要数十或数百个服务来支撑,一个请求就要多次服务调用. 当请求变慢.或者不能使用时,我们是不知道是哪个后台服务引起的. 这时,我们使用 Zipkin 就能解决这个问题. 由 ...
- 题解 CF803A Maximal Binary Matrix
Luogu codeforces 前言 模拟赛原题.. 好好一道送分被我硬打成爆蛋.. \(\sf{Solution}\) 看了一波数据范围,感觉能 dfs 骗分. 骗成正解了. 大概就是将这个 \( ...
- 九、docker swarm主机编排
一. 什么是Docker Swarm Swarm 是 Docker 公司推出的用来管理 docker 集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/do ...
- 一键部署haproxy脚本
HAPROXY_VERSION=2.6.6 HAPROXY_FILE=haproxy-${HAPROXY_VERSION}.tar.gz #HAPROXY_FILE=haproxy-2.2.12.ta ...
- 中小型企业综合项目(Nginx+LVS+Tomcat+MGR+Nexus+NFS)
Nginx+Tomcat+Mysql综合实验 1.环境准备 服务器 IP地址 作用 系统版本 数据库服务器1 192.168.100.111 MGR集群数据库master节点 Rocky8.6 数据库 ...
- [Android开发学iOS系列] Auto Layout
[Android开发学iOS系列] Auto Layout 内容: 介绍什么是Auto Layout. 基本使用方法 在代码中写约束的方法 Auto Layout的原理 尺寸和优先级 Auto Lay ...
- 洛谷P5309 Ynoi 2011 初始化 题解
题面. 我也想过根号分治,但是题目刷得少,数组不敢开,所以还是看题解做的. 这道题目要用到根号分治的思想,可以看看这道题目和我的题解. 题目要求处理一个数组a,支持如下操作. 对一个整数x,对数组长度 ...