MongoDB 快速入门+单机部署(附带脚本)
目录
介绍
体系结构
数据模型
BSON
BSON 数据类型
特点
高性能
高可用
高扩展
丰富的查询支持
其他特点
部署
单机部署
普通安装
脚本安装
Docker Compose 安装
卸载
停止 MongoDB
删除包
删除数据目录
参考: https://docs.mongoing.com/
介绍
Mongodb 是一个开源的,高性能,五模式的文档行数据库,当初的设计就是用于简化开发和方便扩展,是 NoSQL 数据库产品中的一种。是最像关系型数据库 MYSQL 的非关系型和数据库
它支持的数据结构非常松散,是一种类似于 JSON 的格式,叫做 BSON , 所以它既可以存储比较复杂的数据类型,又相对灵活
Mongodb 中的记录是一个文档,它是一个由字段和值组成的数据结构,简称键值对结构,Mongodb 文档类似于 JSON 对象,即一个文档认为是一个对象,字段的数据类型是字符型,它的值除了使用基本的一些类型以外,还可以包括其他文档,普通数组和文档数组
体系结构
SQL 术语 | MongoDB 术语 | 说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表 / 集合 |
row | document | 数据记录行 / 文档 |
column | field | 数据记录列 / 域 |
index | index | 索引 |
table joins | 联表 | |
嵌入文档 | Mongodb 通过嵌入文档来替换多表连接 | |
primary key | primary key | 主键,Mongodb 会自动将 id 设置为主键 |
数据模型
Mongodb 的最小单位就是文档(document)对象,文档对象对应关系型数据库的行,数据在 Mongodb 中以 BSON 格式存储数据在磁盘上
BSON
BSON (Binary Serialized Document Format) 是一种类似 json 的一种二进制形式的存储,简称 Binary JSON , BSON 和 JSON 一样支持嵌套文档对象和数组对象,但是 BSON 还多出一些数据类型,比如:Date 和 BinD艾特类型
BSON 采用了类似 C 语言结构体的名称,对表示方法,支持内嵌的文档对象和数组对象,具有轻量性,可遍历性,高效性三个特点,可以有效描述非结构化数据和结构化数据。这种格式的优点是灵活性高,但是它的缺点是空间利用率不是很理想
BSON 中,除了基本的 JSON 类型, String ,Integer ,Boolean , Double , Null , Array 和 Object 。mongo 还使用了特殊的数据类型,这些类型包括 data , object id,binary data , regularexpression 和 code 。 每一个驱动都以特定的语言方式实现了这些类型,查看你的驱动的文档来获取详细信息
BSON 数据类型
数据类型 | 描述 | 举例 |
---|---|---|
string | UTF-8 字符串都可以表示为字符串类型的数据 | {“X”:"foober"} |
object id | 对象 id 是文档的 12 字节的唯一 id | {"X":ObjectId()} |
boolean | true / false | {"X":true}+ |
array | 值的集合或者列表可以表示成数组 | {“X”:["a","b","c"]} |
32位整数 | 类型不可用。js仅支持 64 位浮点数,所以该整数会被自动转换 | shell 也不支持,shell 会默认将其转换成 64 位 |
64位整数 | 不支持这个类型,js 仅支持 64 位浮点型,shell 会使用一个特殊的内嵌文档来显示 64 位整数 | 和上述一致 |
64位浮点型 | shell 中的数字就是这种类型 | {“X”:3.1415926,"y":3} |
null | 表示空值或者未定义的对象 | {“x”:null} |
undefined | 文档中也可以使用未定义类型 | {“x”:undefined} |
符号 | shell 不支持,自动转换成字符型 | |
正则表达式 | 使用的是 js 的正则表达式规则 | {“x”:/doober/i} |
代码 | 文档中还可以包含 js 代码 | {“x”: function} |
二进制数据 | 二进制数据可以由任意字节组成,不过 shell 无法支持 | |
最大/最小值 | BSON 包含一个特殊的数据类型,表示可能的最大/最小值,但是 shell 没有这个类型 |
shell 默认使用 64 位浮点型数值。对于整型,可以使用 Numberlnt (4 字节符号整数)或者 NumberLong (8字节长整型)
特点
高性能
Mongodb 提供高性能的数据持久化,特别是对嵌入式数据模型的支持减少了数据系统上的 I/O 活动
索引支 持更快的查询,并且可以包括孩子嵌入式文档和数据的键。(文本索引解决搜索的需求,TTL 索引解决历史数据自动过期的需求,地理位置索引可用于构建各种 O2O 应用)
mmapv1 , wiredtiger . mongorocks (rocksdb) , in-memory 等多引擎支持满足各种场景需求
Gridfs 解决文件存储需求
高可用
Mongodb 的复制工具称为副本集 ( replica set ) , 它可以提供自动故障转移和数据冗余
高扩展
Mongodb 提供了水平可扩展性作为其核心功能的一部分
分片将数据分布在一组集群的机器上。 海量数据存储,服务能力水平扩展
从 3.4 开始,Mongodb 支持基于**片键**创建数据区域。在一个平衡的集群中,MongoDB 将一个区域多覆盖的读写只定向到该区域内的那些片
丰富的查询支持
Mongodb 支持丰富的查询语言,支持读写操作(CRUD),比如数据聚合,文本搜索和地理空间查询等
其他特点
如:无模式(动态模式),灵活的文档模型
部署
参考: 在 Ubuntu 上安装 MongoDB Community Edition - MongoDB 手册 v7.0
单机部署
普通安装
MongoDB 仅支持这些平台的 64 位版本。要确定您的主机当前正在运行的 Ubuntu 版本,请在主机的终端上运行以下命令:
root@slave03:~# cat /etc/lsb-releaseDISTRIB_ID=UbuntuDISTRIB_RELEASE=22.04DISTRIB_CODENAME=jammyDISTRIB_DESCRIPTION="Ubuntu 22.04.4 LTS"
导入公钥
sudo apt-get install gnupg curl
要导入 MongoDB 公共 GPG 密钥,请运行以下命令:
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg \--dearmor#
创建列表文件
为您的 Ubuntu 版本创建列表文件 /etc/apt/sources.list.d/mongodb-org-7.0.list
。
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
重新加载包数据库
sudo apt-get update
安装 MongoDB Community Server集群部署
sudo apt-get install -y mongodb-org
如果通过软件包管理器安装,则在安装过程中会创建数据目录 /var/lib/mongodb
和日志目录 /var/log/mongodb
。
默认情况下,MongoDB 使用 mongodb
用户账户运行。如果更改运行 MongoDB 进程的用户,您还必须修改数据和日志目录以赋予该用户访问这些目录的权限。
配置文件
目录:/etc/mongod.conf
启动 MongoDB。
sudo systemctl start mongod
如果收到类似下方的错误
Failed to start mongod.service: Unit mongod.service not found.
首先运行以下命令
sudo systemctl daemon-reload
再次启动
验证 MongoDB 是否已成功启动。
sudo systemctl status mongod
开机自启动
sudo systemctl enable mongod
开始使用 MongoDB
默认端口号为 27017
mongosh
退出:exit
附赠一篇脚本
注意:脚本安装只限于 Ubuntu22.04 以及 CentOS8
脚本安装
#!/bin/bash
#### @Author: huangqian# @Date: 2024-09-30 17:18:03# @LastEditors: huangqian # @LastEditTime: 2024-09-30 19:05:12# @FilePath: \shellProject\数据库\mongodb_setup.sh# @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
### # define Color
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # null Color# logs function
log() {echo -e "$1 $YELLOW $(date '+%F %T') $NC - $2" | tee -a "/var/log/mongodb_setup.log" | sed 's/\x1b\[[0-9;]*m//g'
}# Server status function
Server_Status(){if [[ $? -ne 0 ]]; thenlog "$RED [ERROR] $NC" "$RED $1 faild $NC"exit 1;elselog "$GREEN [SUCCESS] $NC" "$GREEN $1 success $NC"fi
}# Ubuntu install mongodb function
Ubuntu_setup(){apt-get install gnupg curlServer_Status "Gnupg and curl download"# import MongoDB GPGcurl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmorServer_Status "Import MongoDB GPG"# Create /etc/apt/sources.list.d/mongodb-org-7.0.listecho "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.listServer_Status "Create mongodb-org-7.0.list"# Update aptapt-get updateServer_Status "Update apt"# Install MongoDB Community Serverapt-get install -y mongodb-orgServer_Status "Install mongodb-org"systemctl daemon-reload
}# Centos install mongodb function
CentOS_setup(){cat > /etc/yum.repos.d/mongodb-org-7.0.repo << EOF
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/8/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://pgp.mongodb.com/server-7.0.asc
EOFServer_Status "mongodb-org-7.0.repo configuration"yum install -y mongodb-orgServer_Status "Install mongodb-org"yum install -y mongodb-org-7.0.14 mongodb-org-database-7.0.14 mongodb-org-server-7.0.14 mongodb-mongosh-7.0.14 mongodb-org-mongos-7.0.14 mongodb-org-tools-7.0.14Server_Status "Install MongoDB related softword package"# Auto Update softword packageexclude=mongodb-org,mongodb-org-database,mongodb-org-server,mongodb-mongosh,mongodb-org-mongos,mongodb-org-toolsServer_Status "Auto Update softword package"chown -R mongod:mongod /var/log/mongodb# Install SELinux strategyyum install git make checkpolicy policycoreutils selinux-policy-develServer_Status "Install SELinux strategy"which gitif [ $? -eq 0 ];thengit clone https://github.com/mongodb/mongodb-selinuxServer_Status "SELinux strategy clone"cd mongodb-selinuxmake && make installServer_Status "make && make install"elselog "$RED [ERROR] $NC" "git uninstall or not configuration PATH"fi
}info(){echo "$GREEN Enter [ systemctl start mongod ] start MongoDB $NC"echo "$GREEN Enter [ systemctl status mongod ] check status MongoDB $NC"echo "$GREEN Enter [ systemctl enable mongod ] starting Up start MongoDB $NC"echo "$GREEN Check MongoDB logs [ cat /var/log/mongodb_setup.log ] $NC"
}# Confirm system version
SysVersion(){local SYSTEM_VERSION=$(cat /etc/lsb-release | awk 'NR==2');if [[ $SYSTEM_VERSION = 'DISTRIB_RELEASE=22.04' ]];then# Start installlog "$YELLOW [INFO] $NC" "$YELLOW Ubuntu install ... $NC"Ubuntu_setupelselog "$YELLOW [INFO] $NC" "$YELLOW CentOS install ... $NC"CentOS_setupfi
}main(){SysVersioninfo
}main
Docker Compose 安装
创建数据目录
mkdir -p /root/mongo/data
docker-compose.yml
services:mongodb:container_name: mymongoimage: mongo:latestrestart: alwaysports:- "27017:27017"environment:- MONGO_INITDB_ROOT_USERNAME=root- MONGO_INITDB_ROOT_PASSWORD=rootvolumes:- /root/mongo/data:/data/dbcommand:- "--auth"
启动
docker compose up -d
后续的使用和上诉安装之后是一致的
卸载
docker 版本的如何卸载不用过多赘述
停止 MongoDB
sudo service mongod stop
删除包
sudo apt-get purge "mongodb-org*"
删除数据目录
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb
有关副本集群的搭建请跳转至:链接:https://blog.csdn.net/qq_62866151/article/details/142671701?sharetype=blogdetail&sharerId=142671701&sharerefer=PC&sharesource=qq_62866151&spm=1011.2480.3001.8118
相关文章:

MongoDB 快速入门+单机部署(附带脚本)
目录 介绍 体系结构 数据模型 BSON BSON 数据类型 特点 高性能 高可用 高扩展 丰富的查询支持 其他特点 部署 单机部署 普通安装 脚本安装 Docker Compose 安装 卸载 停止 MongoDB 删除包 删除数据目录 参考: https://docs.mongoing.com/ 介绍…...

组合数求法汇总
一:递推求解 对于组合数,有此式: C n m C n − 1 m − 1 C n − 1 m C_{n}^{m}C_{n-1}^{m-1}C_{n-1}^{m} CnmCn−1m−1Cn−1m。 C n m C_{n}^{m} Cnm 可理解为 n n n 个数中选 m m m 个,不同的方案。对于第 n n n 个…...

Python知识点:在Python编程中,如何使用Joblib进行并行计算
开篇,先说一个好消息,截止到2025年1月1日前,翻到文末找到我,赠送定制版的开题报告和任务书,先到先得!过期不候! Joblib是一个Python库,它被设计用来提供轻便的并行计算解决方案&…...

matlab-对比两张图片的CIElab分量的差值并形成直方图
%对比两张图片的CIElab分量的差值并形成直方图,改个路径就能用,图片分辨率要一致 close all; clear all; clc; I1imread(E:\test\resources\image\1.jpg); I2imread(E:\test\resources\image\2.jpg); lab1 rgb2lab(I1); lab2 rgb2lab(I2); % 提取色度…...

(十七)、Mac 安装k8s
文章目录 1、Enable Kubernetes2、查看k8s运行状态3、启用 kubernetes-dashboard3.1、如果启动成功,可以在浏览器访问3.2、如果没有跳转,需要单独安装 kubernetes-dashboard3.2.1、方式一:一步到位3.2.2、方式二:逐步进行 1、Enab…...

信息学奥赛一本通 2087:【22CSPJ普及组】解密(decode) | 洛谷 P8814 [CSP-J 2022] 解密
【题目链接】 洛谷 P8814 [CSP-J 2022] 解密 ybt 2087:【22CSPJ普及组】解密(decode) 【题目考点】 1. 数学:一元二次方程求根 【解题思路】 输入n,d,e,满足 n p ∗ q np*q np∗q e ∗ d ( p − 1 ) ( q − 1…...

【重学 MySQL】四十八、DCL 中的 commit 和 rollback
【重学 MySQL】四十八、DCL 中的 commit 和 rollback commit的定义与作用rollback的定义与作用使用场景相关示例注意事项DDL 和 DML 的说明 在MySQL中,DCL(Data Control Language,数据控制语言)用于管理数据库用户和控制数据的访问…...

Java面试八股之认证授权
一、概念: 1、什么是认证?什么是授权? 认证 用于在系统登录时,验证身份的凭证,类似于账号、密码等。 授权 用户在访问资源时,根据权限的不同对资源访问程度不同。 2、什么是cookie?什么是…...

RCE_绕过综合
<aside> 💡 管道符 </aside> <aside> 💡 通配符绕过 </aside> **匹配任何字符串/文本,包括空字符串;*代表任意字符(0个或多个)? 匹配任何一个字符(不…...

关于Generator,async 和 await的介绍
在本篇文章中我们主要围绕下面几个问题来介绍async 和await 🍰Generator的作用,async 及 await 的特点,它们的优点和缺点分别是什么?await 原理是什么? 📅我的感受是我们先来了解Generator,在去…...

Redis数据库与GO(二):list,set
一、list(列表) list(列表)是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。List本质是个链表, list是一个双向链表,其元素是有序的,元…...

c++知识点总结
1.把字符串a复制到b里面 #include<iostream> #include<string.h> using namespace std; int main() {char a[110],b[110];cin>>a;int n strlen(a);for(int i 0;i<n1;i){b[i] a[i];}cout<<b;return 0; }2.比较两个字符串的大小 如果a大返回1&…...

无IDEA不Java:快速掌握Java集成开发环境
IntelliJ IDEA是一种强大的Java集成开发环境,是Java开发人员的首选工具之一。本文将介绍IDEA的基本使用方法和常用功能,以帮助初学者快速上手。 安装和配置 首先,需要下载并安装IntelliJ IDEA。在安装完成后,需要配置JDKÿ…...

9.30学习记录(补)
手撕线程池: 1.进程:进程就是运行中的程序 2.线程的最大数量取决于CPU的核数 3.创建线程 thread t1; 在使用多线程时,由于线程是由上至下走的,所以主程序要等待线程全部执行完才能结束否则就会发生报错。通过thread.join()来实现 但是如果在一个比…...

移动应用中提升用户体验的因素
用户体验(UX)是任何移动应用程序成功的关键因素。随着数以百万计的应用程序争夺注意力,提供无缝、愉快和高效的体验可能是获得忠实用户或在一次互动后失去忠实用户之间的区别。无论是商业应用程序、游戏还是社交平台,增强用户体验…...

VS与VSCode的区别
文章目录 1. 什么是 Visual Studio 和 Visual Studio Code?Visual Studio(VS)Visual Studio Code(VS Code) 2. 主要区别详解性能和资源占用功能和复杂性扩展和自定义适用场景价格 3. 详细对比总结4. 如何选择适合自己的…...

用Python和OpenCV实现人脸识别:构建智能识别系统
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 人脸识别技术在现代社会的各个领域得到了广泛应用,从智能手机的面部解锁到公共场所的安全监控,人脸识别已经成为一项日益重要的技术。本教程将指导你使用Python中的OpenCV库来构建一个简单的人脸检测与识别系统…...

微积分-反函数6.5(指数增长和衰减)
在许多自然现象中,数量的增长或衰减与其大小成正比。例如,如果 y f ( t ) y f(t) yf(t) 表示在时间 t t t 时某种动物或细菌种群的个体数量,那么似乎可以合理地假设增长速率 f ’ ( t ) f’(t) f’(t) 与种群 f ( t ) f(t) f(t) 成正比…...

C初阶(十二)do - while循环 --- 致敬革命烈士
大家国庆看阅兵仪式和天安门升旗仪式了吗?岁月安好,只因有人负重前行。 ————山那边是什么 ————是烈士的英魄 ————是他们拼死保卫的新中国 ————河那边是什么 ————是绵延的战火 ————她望着远方泪一滴滴的落 ————和平来了 ——…...

从零开始:SpringBoot实现古典舞在线交流平台
第二章 相关技术介绍 2.1Java技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译…...

AL生成文章标题指定路径保存:创新工具助力内容创作高效启航
在信息爆炸的时代,一个吸引人的标题是文章成功的第一步。它不仅要准确概括文章内容,还要能激发读者的好奇心,促使他们点击阅读。随着人工智能技术的飞速发展,AL生成文章标题功能正逐渐成为内容创作者的新宠,看看它是如…...

java基础知识汇总
以下内容是学习《java核心技术卷1》的学习笔记 一、一个简单的java应用程序 public class App { public static void main(String[] args) { System.out.println("yuanyexiaolu"); } } 代码解释: 关键字public称为访问修饰符,这些修饰…...

2.点位管理|前后端如何交互——帝可得后台管理系统
目录 前言点位管理菜单模块1.需求说明2.库表设计3.生成基础代码0 .使用若依代码生成器最终目标1.创建点位管理2.添加数据字典3.配置代码生成信息4.下载代码并导入项目 4.优化菜单——点位管理1.优化区域管理2.增加点位数3. 合作商4.区域管理中添加查看详情功能5.合作商添加点位…...

Redis基础二(spring整合redis)
Springboot整合Redis 一、Springboot整合redis redis可以通过使用java代码来实现 第一部分文档中 在终端操作redis的所有命令,Spring已经帮我们封装了所有的操作,所以变得很简单了。 Spring专门提供了一个模块来进行这些操作的封装,这…...

JAVA开源项目 教学资源库系统 计算机毕业设计
本文项目编号 T 067 ,文末自助获取源码 \color{red}{T067,文末自助获取源码} T067,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计5.4.1 管…...

二分查找算法专题(2)
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: 优选算法专题 对于二分查找算法不是很了解或者只了解一部分的小伙伴一定要去看下面这篇博客:二分查找算法的介绍与另外一种查找方…...

[Python] 编程入门:理解变量类型
文章目录 [toc] 整数常见操作 浮点数字符串字符串中混用引号问题字符串长度计算字符串拼接 布尔类型动态类型特性类型转换结语 收录专栏:[Python] 在编程中,变量是用于存储数据的容器,而不同的变量类型则用来存储不同种类的数据。Python 与 C…...

C(九)while循环 --- 军训匕首操情景
匕首操,oi~oi~oi~~~~~ 接下来的几篇推文,杰哥记录的是三大循环结构的运行流程及其变式。 本篇的主角是while循环。👉 目录: while循环 的组成、运行流程及其变式关键字break 和 continue 在while 循环中的作用while 循环的嵌套题目…...

C#秒如何转为时分秒格式
将秒数转换为分钟和秒数可以通过简单的数学运算来实现。假设你有一个整数表示秒数,可以通过以下方式转换为分钟: 将秒数除以 3600 来获取时钟的整数部分。 将秒数求余 3600的结果除以60 来获取分钟的整数部分。 用秒数求余 60 来获取余下的秒数。 具体实现函数如下: //…...

重学SpringBoot3-集成Redis(三)
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(三) 1. 引入 Redis 依赖2. 配置 RedisCacheManager 及自定义过期策略2.1 示例代码:自定义过期策略 3. 配置…...