news 2026/10/14 8:46:04

Linux入门攻坚——94、MongoDB数据库安装使用初步-1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux入门攻坚——94、MongoDB数据库安装使用初步-1

MongoDB发展了很长时间,形成了一系列版本,要安装使用,需要了解这些版本的异同。

MongoDB软件包:MongoDB在4.2之前,提供了四个独立包。随着版本迭代,为了简化安装和明确功能边界,包的结构发生了变化。

在 MongoDB 4.2 及更早的版本中,官方源通常包含以下四个核心包(以 mongodb-org 为前缀):
★ mongodb-org-server:包含 mongod 守护进程。这是最核心的数据库进程,负责数据存储、查询处理、复制集管理等,并附带默认配置文件和初始化脚本。
★ mongodb-org-mongos:包含 mongos 守护进程。它是分片集群的查询路由器,负责将客户端请求路由到正确的分片,并合并结果。单机或副本集部署不需要安装它。
★ mongodb-org-shell:包含传统的 mongo 交互式 Shell。它是基于 JavaScript 的命令行客户端,用于连接和操作数据库。
★ mongodb-org-tools:包含一系列数据管理工具,如 mongodump、mongorestore、mongoimport、mongoexport、mongostat 等,用于备份、恢复和监控。

后续版本的包缩减与演变,随着版本更新(尤其是4.4之后及6.0),MongoDB对包进行了重构:
1. 工具包独立:自 4.4 起,数据库工具从 mongodb-org-tools 中剥离,转为独立的 mongodb-database-tools 包,拥有独立的版本号(如 100.x),不再与 Server 版本强绑定。
2. Shell 被取代:传统的 mongo Shell 在 6.0 中被正式弃用,取而代之的是功能更强的新一代 Shell —— mongosh,它有独立的包(如 mongodb-mongosh)。
3. Server 与 Mongos 仍独立:mongodb-org-server 和 mongodb-org-mongos 包依然存在,功能未变。

现代版本的核心包(6.0 及之后),在较新的版本中,通常需要组合安装以下包:
★ mongodb-org-server:核心的 mongod 进程。
★ mongodb-org-mongos:用于分片集群的 mongos 路由进程。
★ mongodb-mongosh:新一代的 mongosh 命令行 Shell。
★ mongodb-database-tools:独立的数据备份、恢复及导出工具集。

总结来说,包在缩减是指工具和 Shell 从 Server 包中独立出去,而不是核心功能消失。现在部署一个标准节点,通常只需安装 mongodb-org-server 和 mongosh;若需分片,再加 mongos;若需备份,则单独安装工具包。

MongoDB安装测试版本选择:

适配CentOS7的MongoDB最高版本为7.0.41,测试选择7.0.40,mongosh选择2.6.0版本
mongodb-linux-x86_64-rhel70-7.0.40.tgz #这是压缩归档包,包含了server和mongos
mongodb-org-server-7.0.40-1.el7.x86_64.rpm #单独的MongoDB server的RPM安装包
mongodb-org-mongos-7.0.40-1.el7.x86_64.rpm #单独的Mongos的RPM安装包
mongodb-mongosh-2.6.0.x86_64.rpm # mongosh安装包
mongodb-mongosh-shared-openssl11-2.6.0.x86_64.rpm #是 MongoDB 官方提供的一个特定版本的 mongosh(MongoDB Shell)安装包,其核心作用是‌解决在旧版 Linux 系统(如 CentOS 7、RHEL 7)上运行新版 mongosh 时遇到的 OpenSSL 依赖冲突问题‌。新版本的 mongosh(通常基于较新的 Node.js 运行时构建)依赖 ‌OpenSSL 1.1‌ 库(即 libcrypto.so.1.1 和 libssl.so.1.1)。
CentOS 7 和 RHEL 7 默认自带的是 ‌OpenSSL 1.0‌,系统中通常没有 OpenSSL 1.1 的库文件。如果直接安装标准的 mongodb-mongosh 包,启动时会报错,mongodb-mongosh-shared-openssl11 这个包在编译时链接了 OpenSSL 1.1,或者其依赖关系明确指向了 OpenSSL 1.1 环境。它通常与 compat-openssl11 包配合使用,确保 mongosh 能在只装有 OpenSSL 1.0 的系统上找到所需的 1.1 版本库。

MongoDB安装与配置:
yum install mongodb-org-server-7.0.40-1.el7.x86_64.rpm mongodb-org-shell-5.0.33-1.el7.x86_64.rpm mongodb-org-tools-4.2.25-1.el7.x86_64.rpm
通过rpm -qi mongodb-org-server,可以看到这个包的详情:
This package contains theMongoDB server software,default configuration files,andsystemd service files.这个包安装后,包含了服务器软件,默认的配置文件和服务启动管理文件。

mongodb-org-shell包含了mongo shell:

mongodb-org-tools包含了管理工具:

安装完毕后,需要进行配置,配置文件:/etc/mongod.conf

配置文件采用YAML‌格式,用于配置mongod(数据库服务)和mongos(路由服务实例)。

systemLog(系统日志配置):控制 MongoDB 日志的输出方式、位置和详细程度。

storage(存储引擎配置):配置数据存储路径、引擎类型及性能参数。MongoDB 7 默认使用 ‌WiredTiger‌ 引擎。

net(网络配置):控制 MongoDB 监听的网络接口、端口及安全传输层。

processManagement(进程管理配置):控制 MongoDB 进程的后台运行行为。

security(安全配置):启用访问控制和加密等安全特性。

replication(副本集配置):配置节点作为副本集成员的行为。

sharding(分片配置):仅用于 mongos 路由进程或分片集群中的 mongod 实例。

operationProfiling(性能分析配置):用于捕获慢查询和操作性能数据。

配置数据存储位置,创建目录:/mongodb/data,修改其属主属组为mongod
chown -R mongod.mongod /mongdb/
storage的dbpath为/mongodb/data:dbpath: /mongodb/data
配置网络监听地址为本机的IP:192.168.147.137
bindIp: 192.168.147.137

MongoDB的启动与使用:

systemctl start mongod

启动后,MongoDB的数据存储位置生成大量数据文件。
查看其监听端口:

使用命令行工具,实时查看连接数、操作类型、内存使用等核心指标:
mongostat --host IP --port 27017

连接数据库,使用mongo命令


登录:mongo --host 192.168.147.137

因为配置中的安全选项没有配置,默认不认证用户权限,所以直接登录进入。
进入数据库后的相关命令,可以使用help查看:

MongoDB概念解析:在mongodb中基本的概念是文档、集合、数据库,与关系型数据库中概念的对比,可以帮助理解MongoDB数据库:

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

数据库,database:一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
show dbs命令可以显示所有数据的列表。

执行 "db" 命令可以显示当前数据库对象或集合。

显示当前数据库是test。
运行"use"命令,可以连接到一个指定的数据库。

从上述操作结果,可以看出,所谓db就是当前数据库的别名,也可看成是一个指向当前数据库的符号链接。
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

文档,documents:文档是一组键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
需要注意的是:
1、文档中的键/值对是有序的。
2、文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
3、MongoDB区分类型和大小写。
4、MongoDB的文档不能有重复的键。
5、文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

集合,collection,就是 MongoDB 文档组,类似于 RDBMS 中的表格。集合存在于数据库中,集合没有固定的结构,这意味着对集合可以插入不同格式和类型的数据,但通常情况下插入集合的数据都会有一定的关联性。

元数据:数据库的信息是存储在集合中。它们使用了系统的命名空间:
dbname.system.*
在MongoDB数据库中名字空间 <dbname>.system.* 是包含多种系统信息的特殊集合(Collection),如下:

集合命名空间描述
dbname.system.namespaces列出所有名字空间。
dbname.system.indexes列出所有索引。
dbname.system.profile包含数据库概要(profile)信息。
dbname.system.users列出所有可访问数据库的用户。
dbname.local.sources包含复制对端(slave)的服务器信息和状态。

对于数据库,有很数据库方法,操作数据库的方法,使用db.help()查看。如:
db.stats(),查看当前数据库的状态;

db.serverStatus(),查看数据库服务器的状态;

db.mycoll.help(),可以获取集合方法,用于操作集合的方法,类似操作数据库表的方法,DML。
db.students.insert({name:"tom",age:32}),向students集合中插入一个文档;
db.students.find(),列出students集合中的所有文档;

db.mycoll.update(),更新操作;
db.mycoll.remove(),删除操纵;
db.mycoll.drop(),删除集合;

实际上,上述的众多方法,就是比照SQL的功能做的针对性实现,不同的NoSQL,有自己不同的一套方法。

条件操作符:用于比较两个表达式并从mongoDB集合中获取数据。
MongoDB中条件操作符有:

  • (>) 大于 - $gt
  • (<) 小于 - $lt
  • (>=) 大于等于 - $gte
  • (<= ) 小于等于 - $lte

例如:db.col.find({"age" : {$gt : 20}}) ,类似于SQL语句:Select * from col where age >20;

条件操作符 $type: $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。MongoDB 中可以使用的类型如下表所示:

想获取 "col" 集合中 title 为 String 的数据,你可以使用以下命令:
db.col.find({"title" : {$type : 2}})

Limit与Skip方法:
需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

排序:使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
db.COLLECTION_NAME.find().sort({KEY:1})

索引:使用 ensureIndex() 方法来创建索引,Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。
db.COLLECTION_NAME.ensureIndex({KEY:1}) #低版本中,在高版本中已经弃用
db.COLLECTION_NAME.createIndex({KEY:1})

索引有多种类型:B+ Tree、hash、空间索引、全文索引
MongoDB索引类型:单字段索引、组合索引(多字段索引)、多键索引、空间索引、文本索引、 hash索引。
ensureIndex() 接收可选参数,可选参数列表如下:

ParameterTypeDescription
backgroundBoolean建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。
uniqueBoolean建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
namestring索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
dropDupsBoolean在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为false.
sparseBoolean对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为false.
expireAfterSecondsinteger指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
vindex version索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weightsdocument索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
default_languagestring对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
language_overridestring对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.

db.values.ensureIndex({open: 1, close: 1}, {background: true})

聚合:聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。MongoDB中聚合的方法使用aggregate()。
语法:db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
示例:db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
一些聚合的表达式:

表达式描述实例
$sum计算总和。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg计算平均值db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min获取集合中所有文档对应值得最小值。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max获取集合中所有文档对应值得最大值。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push在结果文档中插入值到一个数组中。db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet在结果文档中插入值到一个数组中,但不创建副本。db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first根据资源文档的排序获取第一个文档数据。db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last根据资源文档的排序获取最后一个文档数据db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

管道的概念:管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
聚合框架中常用的几个操作:
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group:将集合中的文档分组,可用于统计结果。
$sort:将输入文档排序后输出。
$geoNear:输出接近某一地理位置的有序文档。

mongod及其选项:

使用mongod --help,可以查看mongod命令的选项,大体上分为以下几大类:
General options、Replication options、Replica set options、Serverless mode、Sharding options、Storage options、TLS Options等。这些选项与配置文件中配置项对应,也就是可以写在配置文件中,也可以在使用mongod命令启动时,使用选项指定。
常用选项及其说明:
fork={true|false}: mongod是否运行在后台;
bind_ip=IP:指定监听的地址;
port=PORT:指定监听的端口;
maxConns= :并发最大连接数

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 8:45:26

基于AFSA-RBF神经网络的电动汽车电池SOC预测

简介&#xff1a;一份面向电动汽车电池管理系统研究者的专业参考文献&#xff0c;聚焦动力电池荷电状态估算精度不足这一行业痛点。内容系统阐述了人工鱼群算法优化径向基函数神经网络的全过程&#xff1a;从RBF网络结构设计、输入参数选取&#xff08;电压、电流、温度&#x…

作者头像 李华
网站建设 2026/10/14 8:45:25

SpringBoot赛事管理系统开发实战与架构解析

1. 项目背景与核心价值去年参与某省级民族运动会信息化建设时&#xff0c;我深刻体会到传统赛务管理的痛点&#xff1a;纸质报名表堆积如山、赛程调整需要逐个电话通知、成绩统计经常出现人为差错。这正是我选择开发这套赛务管理系统的初衷——用SpringBoot技术栈打造一个全流程…

作者头像 李华
网站建设 2026/10/14 8:45:18

Spark任务倾斜实战:从Spark UI定位到两阶段聚合与Join优化

前几天凌晨&#xff0c;一个离线任务在跑大表关联时又卡住了。作业进度条停在某个Stage不动&#xff0c;一个Task跑了快六个小时&#xff0c;其余几十个几十秒就跑完了。这种现象在大数据环境里太常见了&#xff1a;代码没报错&#xff0c;资源也没少给&#xff0c;就是干等。本…

作者头像 李华
网站建设 2026/10/14 8:45:05

高职机器视觉课程实践:实训项目设计与产线故障排查全攻略

高职院校的机器视觉课程&#xff0c;最难的不是讲清楚算法原理&#xff0c;而是让学生走出校门就能上手调设备、跑产线、解决实际检测问题。市面上讲机器视觉的教材和网课不少&#xff0c;但大多是本科向的&#xff0c;侧重数学推导和算法底层实现&#xff0c;放到高职课堂里&a…

作者头像 李华
网站建设 2026/10/14 8:45:04

阿里云百炼大模型平台使用指南:从免费额度到生产落地

1. 先说清楚&#xff1a;百炼到底是做什么的&#xff0c;什么人需要它 这两年大模型火得很快&#xff0c;几乎每周都有新模型发布、新能力上线。很多开发者和团队其实早就不再纠结“要不要用大模型”&#xff0c;而是开始纠结“怎么用好大模型”。但真到动手阶段&#xff0c;问…

作者头像 李华