## 一、环境与版本说明 本次实操基于国产化操作系统 **openEuler 24.03 SP3 LTS**,采用离线二进制包方式部署 **MongoDB 8.2.9 社区版**,同时搭配配套客户端、可视化工具与 Python 驱动,完成从服务部署、远程连接、可视化管理到代码开发的全链路落地。 ### 整套环境版本清单 - 操作系统:openEuler 24.03 SP3 LTS - MongoDB 服务端:MongoDB Community 8.2.9 - 可视化工具:MongoDB Compass 1.49.7 - 命令行客户端:MongoDB Shell(mongosh) - 依赖组件:Hadoop 3.5.0、HBase 2.5.14(大数据生态兼容环境) ## 二、MongoDB 基础认知 ### 2.1 产品简介 MongoDB 是一款由 C++ 开发、基于分布式文件存储的**开源文档型 NoSQL 数据库**,介于关系型数据库与纯 NoSQL 之间,也是功能最接近传统关系库的非关系型数据库之一。它采用 **BSON(二进制 JSON)** 格式存储数据,支持 Python、Java、Node.js、C++ 等主流编程语言,广泛应用于移动应用、社交平台、大数据分析、内容管理、用户数据管理等场景。 ### 2.2 核心优势 1. **动态数据模型**:无固定表结构,无需提前定义字段,可灵活适配频繁变更的业务数据; 2. **水平扩展能力**:支持分片集群,可通过多服务器横向扩容,提升并发与存储能力; 3. **高性能读写**:原生支持索引、复杂查询,适配海量数据高并发场景; 4. **弱化关联关系**:摒弃复杂表连接,文档内嵌字段/数组,简化业务逻辑; 5. **事务支持**:4.0 及以上版本支持多文档事务,满足中小型事务场景; 6. **部署灵活**:支持内存+磁盘混合存储,部署、运维、调优门槛低。 ### 2.3 与关系型数据库术语对照 为方便传统 DBA 快速上手,整理 SQL 与 MongoDB 核心术语对应关系: | 关系型数据库(SQL) | MongoDB 文档数据库 | | ---- | ---- | | 数据库(Database) | 数据库(Database) | | 表(Table) | 集合(Collection) | | 行/记录(Row) | 文档(Document) | | 列/字段(Column) | 字段/键(Field) | | 主键(Primary Key) | 对象ID(ObjectId) | | 索引(Index) | 索引(Index) | ### 2.4 常用基础命令 登录 MongoDB 命令行后,可使用以下基础指令完成日常运维: ```bash # 查看数据库操作帮助 db.help() # 查看集合操作帮助 db.集合名.help() # 查看所有数据库 show dbs # 查看当前库下所有集合 show collections # 切换/创建数据库(惰性创建,插入数据后生效) use 数据库名 # 查询集合所有文档 db.集合名.find() # 条件查询 db.集合名.find({字段: 值}) # 分页查看更多结果 it # 退出命令行 exit ``` ## 三、openEuler 离线安装 MongoDB 8.2.9 本文采用**二进制压缩包离线安装**,适配 openEuler 系统,全程无需 yum/dnf 在线源。 ### 3.1 前期准备 1. 确认系统架构(openEuler 主流为 x86_64) ```bash uname -m # 输出 x86_64 则选择对应 RHEL9 版本安装包 ``` 2. 提前下载安装包:MongoDB 8.2.9 RHEL9 x64 版 tgz 压缩包,上传至 openEuler 服务器。 ### 3.2 解压与目录整理 1. 进入下载目录,解压安装包至 `/usr/local` 目录 ```bash # 进入用户下载目录 cd ~/下载 # 解压到 /usr/local sudo tar -zxvf mongodb-linux-x86_64-rhel93-8.2.9.tgz -C /usr/local ``` 2. 重命名目录并配置权限 ```bash # 进入安装目录 cd /usr/local # 简化目录名称 sudo mv mongodb-linux-x86_64-rhel93-8.2.9 mongodb # 赋予普通用户(示例为 hadoop)目录操作权限 sudo chown -R hadoop:hadoop /usr/local/mongodb ``` ### 3.3 创建数据与日志目录 MongoDB 需要独立目录存放数据文件和运行日志: ```bash cd /usr/local/mongodb # 批量创建目录 mkdir -p data/db data/log ``` - `data/db`:数据库数据存储目录 - `data/log`:运行日志存储目录 ### 3.4 编写配置文件 mongodb.conf 在 MongoDB 根目录创建配置文件,统一管理端口、路径、后台运行等参数: ```bash vim /usr/local/mongodb/mongodb.conf ``` 写入以下标准配置(适配远程连接): ```yaml # 数据存储配置 storage: dbPath: /usr/local/mongodb/data/db # 日志配置 systemLog: destination: file logAppend: true path: /usr/local/mongodb/data/log/mongod.log # 网络配置:端口+监听地址(0.0.0.0 允许所有IP远程访问) net: port: 27017 bindIp: 0.0.0.0 # 后台守护进程启动 processManagement: fork: true ``` 保存退出(`ESC` → `:wq`)。 ### 3.5 配置系统环境变量 将 MongoDB 的 `bin` 目录加入系统环境变量,实现全局调用 `mongod`、`mongosh` 命令: 1. 编辑用户环境变量文件 ```bash vim ~/.bashrc ``` 2. 在文件末尾追加内容 ```bash # MongoDB 环境变量 export MONGODB_HOME=/usr/local/mongodb export PATH=$PATH:$MONGODB_HOME/bin ``` 3. 生效环境变量 ```bash source ~/.bashrc # 验证:查看版本 mongod --version ``` ### 3.6 启动服务与端口放行 1. 基于配置文件启动 MongoDB ```bash mongod --config /usr/local/mongodb/mongodb.conf ``` 2. 验证端口(默认 27017)是否监听 ```bash netstat -lntup | grep 27017 ``` 3. 防火墙放行 27017 端口(远程连接必备) openEuler 默认使用 `firewalld` 防火墙,执行以下命令永久放行端口: ```bash # 永久放行 27017 端口 sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent # 重载防火墙规则 sudo firewall-cmd --reload # 查看防火墙状态 systemctl status firewalld ``` > 注意:MongoDB 仅支持客户端/命令行连接,**无法通过浏览器直接访问 27017 端口**。 ## 四、Windows 端远程连接配置 服务端部署完成后,在 Windows 系统中通过 **MongoDB Shell、MongoDB Compass、Navicat** 三种方式远程管理数据库。 ### 4.1 方式一:MongoDB Shell(mongosh 命令行) mongosh 是 MongoDB 官方新一代命令行客户端,替代传统 mongo 命令。 1. 下载 Windows x64 版 zip 安装包,解压至 `D:\mongosh`; 2. 将 `D:\mongosh\bin` 添加到 Windows **系统环境变量**; 3. 打开 CMD/PowerShell,执行远程连接命令: ```cmd # 格式:mongosh 服务器IP:端口 mongosh 192.168.80.128:27017 ``` > 替换 `192.168.80.128` 为你的 openEuler 服务器真实 IP。 4. 常用操作(连接后) ```bash # 查看当前所在数据库 db # 查看所有数据库 show dbs # 切换数据库 use test_db # 退出客户端 quit() ``` ### 4.2 方式二:MongoDB Compass(可视化工具) Compass 是官方图形化管理工具,支持图形化建库、建集合、增删改查、数据导出等操作,新手友好。 1. 官网下载 MongoDB Compass 1.49.7 安装包,双击默认安装; 2. 打开软件,新建连接: - Hostname:填写 openEuler 服务器 IP - Port:默认 `27017` - 点击 **Test Connection** 测试连通性,测试通过后点击 Connect; 3. 实操演示(创建库、集合、插入测试数据) 1)新建数据库:数据库名 `mongodb_test`,集合名 `Student`; 2)向 `Student` 集合插入两条学生测试数据: ```json { "name": "ZhangSan", "score": { "English": 65, "Math": 86, "Computer": 77 } } { "name": "LiSi", "score": { "English": 55, "Math": 100, "Computer": 88 } } ``` 4. 图形化+命令行结合使用 Compass 右上角自带内置 Shell,可直接执行查询、修改命令: ```bash # 查询所有学生数据 db.Student.find({}) # 精准查询李四信息 db.Student.find({"name":"LiSi"}) # 仅查询李四的各科成绩 db.Student.find({"name":"LiSi"},{"score":1}) # 修改李四数学成绩为 95 db.Student.update({"name":"LiSi"},{$set:{"score.Math":95}}) ``` ### 4.3 方式三:Navicat 连接 MongoDB 主流数据库可视化工具 Navicat 也支持 MongoDB 连接,操作步骤: 1. 打开 Navicat,点击「连接」→ 选择「MongoDB」; 2. 填写连接信息: - 连接名:自定义(如 openEuler-MongoDB) - 主机/IP 地址:openEuler 服务器 IP - 端口:`27017` 3. 点击「测试连接」,提示连接成功后,即可图形化管理库、集合与数据。 ## 五、Python 操作 MongoDB(pymongo 实战) Python 通过官方驱动 **pymongo** 实现与 MongoDB 的交互,涵盖连接、增、删、改、查全基础操作。 ### 5.1 安装 pymongo 库 在 Windows/Linux Python 环境中执行安装命令: ```bash pip install pymongo # 验证安装 python -c "import pymongo;print(pymongo.__version__)" ``` ### 5.2 完整代码实战(CRUD) 以下代码包含**连接数据库、插入数据、查询、更新、删除**五大核心操作,附带详细注释。 ```python # 导入 pymongo 客户端 from pymongo import MongoClient # 1. 连接远程 MongoDB(替换为你的服务器IP) client = MongoClient("mongodb://192.168.80.128:27017/") # 2. 创建/选择数据库(mydb,惰性创建) db = client["mydb"] # 3. 创建/选择集合(customers 集合) collection = db["customers"] # ========== 插入单条文档 ========== data = {"name": "John", "address": "Highway 37"} result = collection.insert_one(data) print(f"插入成功,文档ID:{result.inserted_id}") # ========== 查询所有文档 ========== print("\n===== 所有数据 =====") for doc in collection.find(): print(doc) # ========== 更新指定文档 ========== # 匹配条件 query = {"name": "John"} # 更新内容 new_value = {"$set": {"address": "Canyon 123"}} update_res = collection.update_one(query, new_value) print(f"\n修改文档数:{update_res.modified_count}") # ========== 删除指定文档 ========== del_res = collection.delete_one(query) print(f"删除文档数:{del_res.deleted_count}") # 关闭连接 client.close() ``` ### 5.3 代码说明 1. **连接规则**:`MongoClient("mongodb://IP:端口")` 为标准连接格式; 2. **惰性创建**:MongoDB 的数据库和集合不会立即创建,**插入第一条数据后才会真正生成**; 3. **核心方法** - `insert_one()`:插入单条文档; - `find()`:全量查询,返回游标对象,需循环遍历; - `update_one()`:更新匹配的第一条文档,`$set` 为字段更新运算符; - `delete_one()`:删除匹配的第一条文档。 ## 六、常见问题与排错 1. **远程连接失败** - 排查:服务器端口 27017 是否放行防火墙、`bindIp` 是否设为 `0.0.0.0`、服务器 IP 是否互通; 2. **mongod 启动失败** - 排查:`data/db` 目录权限不足、配置文件路径书写错误,查看日志 `/usr/local/mongodb/data/log/mongod.log` 定位问题; 3. **Python 连接超时** - 排查:关闭服务器防火墙临时测试,确认网络互通,检查 IP 和端口是否填写正确。 ## 七、总结 本文基于 openEuler 24.03 SP3 LTS 系统,完成了 **MongoDB 8.2.9 离线部署、环境变量配置、防火墙放行** 整套服务端操作;同时覆盖 Windows 端三大连接方案(命令行 mongosh、可视化 Compass/Navicat),并落地 Python pymongo 增删改查代码实战。 整套流程适配国产化服务器环境,部署简单、运维便捷,既适合大数据、后端开发学习,也可作为生产环境基础部署方案。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐