目录
[2、MongoDB 概念解析](#2、MongoDB 概念解析)
[二、MongoDB 安装与环境配置(Linux 版)](#二、MongoDB 安装与环境配置(Linux 版))
[4、编译安装 OpenSSL 1.1(可选)](#4、编译安装 OpenSSL 1.1(可选))
[三、MongoDB Shell 深度使用](#三、MongoDB Shell 深度使用)
[1、Shell 安装与配置](#1、Shell 安装与配置)
六、数据备份与恢复(mongodump/mongorestore)
一、什么是MongoDB
MongoDB 是一个文档型数据库,数据以类似 JSON 的文档形式存储
MongoDB 的设计理念是为了应对大数据量、高性能和灵活性需求。
MongoDB 使用集合(Collections)来组织文档(Documents),每个文档都是由键值对组成的。
数据库(Database):存储数据的容器,类似于关系型数据库中的数据库。
集合(Collection):数据库中的一个集合,类似于关系型数据库中的表。
文档(Document):集合中的一个数据记录,类似于关系型数据库中的行(row)以 BSON 格式存储。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,文档类似于JSON 对象,字段值可以包含其他文档,数组及文档数组:
1、主要特点
- 文档导向的存储:MongoDB 是一个面向文档的数据库,它以JSON-like 的格式存储数据,使得数据结构更加灵活和丰富。
- 索引优化查询:MongoDB 允许用户为文档中的任意属性创建索引,例如FirstName 和 Address,从而提高查询效率和排序性能。
- 数据镜像与扩展性:通过本地或网络创建数据的副本,MongoDB 实现了强大的数据冗余和扩展能力。
- 水平扩展与分片:面对增加的负载,MongoDB 可以通过分片技术将数据分布到计算机网络中的其他节点上,实现水平扩展。
- 强大的查询语言:MongoDB使用JSON 格式的查询语法,支持复杂的查询表达式,包括对内嵌对象和数组的查询。
- 数据更新:利用命令update(),MongoDB 能够替换整个文档或更新指定的数据字段,提供了灵活的数据更新方式。
- MapReduce 批量处理:MongoDB的 MapReduce 功能专为大规模数据处理和聚合操作设计,通过 Map 函数的 emit(key,value)调用和 Reduce 函数的逻辑处理,实现高效的数据汇总。
- MapReduce 脚本编写:Map 和 Reduce 函数使用 JavaScript 编写,可以通过 db.runCommand或mapreduce命令在 MongoDB 中执行。
- GridFs 大文件存储:GridFs是 MongoDB 内置的功能,用于存储和检索大于 BSON 文档大小限制的文件,如图片和视频。
- 服务端脚本执行:MongoDB 允许在服务端执行 JavaScript 脚本,提供了直接在服务端执行或存储函数定义以供后续调用的能力。
- 多语言支持:MongoDB 提供了对多种编程语言的支持,包括但不限于RUBY、PYTHON、JAVA、C++、PHP 和C#。
2、MongoDB 概念解析
SQL 术语 | MongoDB 术语 | 说明 |
---|---|---|
数据库(Database) | 数据库(Database) | 存储数据的容器 |
表(Table) | 集合(Collection) | 文档的容器,无固定模式 |
行(Row) | 文档(Document) | 数据记录,以 BSON 格式存储 |
列(Column) | 字段(Field) | 文档中的键值对 |
索引(Index) | 索引(Index) | 优化查询性能的数据结构 |
表连接(Join) | 不支持 | 通过嵌入文档或反规范化处理关联数据 |
主键(Primary Key) | _id 字段 | 自动生成的唯一标识符 |
通过下图实例,我们也可以更直观的了解 Mongo 中的一些概念:

3、完整术语列表
- 文档(Document):MongoDB 的基本数据单元,通常是一个JSON-like 的结构,可以包含多种数据类型。
- 集合(Collection):类似于关系型数据库中的表,集合是一组文档的容器。在 MongoDB中,一个集合中的文档不需要有一个固定的模式。
- 数据库(Database):包含一个或多个集合的MongoDB 实例。
- BSON:BinaryJSON的缩写,是MongoDB用来存储和传输文档的二进制形式的JSON。
- 索引(Index):用于优化查询性能的数据结构,可以基于集合中的一个或多个字段创建索引。
- 分片(Sharding):一种分布数据到多个服务器(称为分片)的方法,用于处理大数据集和高吞吐量应用。
- 副本集(Replica Set):一组维护相同数据集的 MongoDB 服务器,提供数据的冗余备份和高可用性。
- 主节点(Primary):副本集中负责处理所有写入操作的服务器。
- 从节点(Secondary):副本集中的服务器,用于读取数据和在主节点故障时接管为主节点。
- MongoDB Shell:MongoDB 提供的命令行界面,用于与 MongoDB 实例交互。
- 聚合框架(Aggregation Framework):用于执行复杂的数据处理和聚合操作的一系列操作。
- Map-Reduce:一种编程模型,用于处理大量数据集的并行计算。
- GridFs:用于存储和检索大于 BSON 文档大小限制的文件的规范。
- ObjectId:MongoDB 为每个文档自动生成的唯一标识符。
- CRUD 操作:创建(Create)、读取(Read)、更新(Update)、删除(Delete)操作。
- 事务(Transactions):从 MongoDB 4.0 开始支持,允许一组操作作为一个原子单元执行。
- 操作符(Operators):用于查询和更新文档的特殊字段。
- 连接(Join):MongoDB 允许在查询中使用 $lookup 操作符来实现类似 SQL 的连接操作。
- TTL(Time-To-Live):可以为集合中的某些字段设置 TTL,以自动删除旧数据。
- 存储引擎(Storage Engine):MongoDB 用于数据存储和管理的底层技术,如WiredTiger和 MongoDB 的旧存储引擎 MMAPv1。
- MongoDB Compass:MongoDB 的图形界面工具,用于可视化和管理 MongoDB 数据。
- MongoDB Atlas:MongoDB 提供的云服务,允许在云中托管 MongoDB 数据库。
二、MongoDB 安装与环境配置(Linux 版)
1、系统要求与依赖安装
-
硬件要求
- 64 位操作系统(推荐 Linux,如 RHEL、Ubuntu)
- 至少 2GB 内存(生产环境建议 8GB+)
- 充足的磁盘空间(根据数据量规划)
-
依赖包安装
在 RHEL/CentOS 系统中,需先安装依赖库:
dnf install libcurl openssl -y
2、安装步骤
-
下载安装包
从 MongoDB 官网下载对应版本的压缩包(以 8.0.8 为例):
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel8-8.0.8.tgz
-
解压与移动
tar zxvf mongodb-linux-x86_64-rhel8-8.0.8.tgz mv mongodb-linux-x86_64-rhel8-8.0.8 /usr/local/mongodb
-
配置环境变量
将 MongoDB 的
bin
目录添加到系统路径:echo 'export PATH=/usr/local/mongodb/bin:$PATH' >> /etc/profile source /etc/profile
3、初始化目录与权限设置
-
创建数据与日志目录
mkdir -p /var/lib/mongo mkdir -p /var/log/mongodb
-
设置权限
chown -R $(whoami) /var/lib/mongo chown -R $(whoami) /var/log/mongodb
4、编译安装 OpenSSL 1.1(可选)
若系统默认 OpenSSL 版本低于 1.1,需手动编译安装:
dnf install -y gcc make perl
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/opt/openssl11 --openssldir=/opt/openssl/ssl
make -j$(nproc)
make install
设置环境变量:
echo 'export LD_LIBRARY_PATH=/opt/openssl11/lib:$LD_LIBRARY_PATH' | tee /etc/profile.d/openssl11.sh
source /etc/profile.d/openssl11.sh
5、启动服务
-
前台启动(调试用)
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log
-
后台启动(生产环境)
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
启动成功后,日志会显示
child process started successfully
。
三、MongoDB Shell 深度使用
1、Shell 安装与配置
-
下载与解压
wget https://downloads.mongodb.com/compass/mongosh-2.5.0-linux-x64-openssl3.tgz tar xzf mongosh-2.5.0-linux-x64-openssl3.tgz cd mongosh-2.5.0-linux-x64-openssl3/bin
-
复制到系统路径
cp mongosh /usr/local/bin/ cp mongosh_crypt_v1.so /usr/local/lib/
2、连接与验证
-
默认连接本地数据库
mongosh
成功连接后显示
test>
提示符,伴随启动警告(可忽略,生产环境需处理)。 -
指定主机与端口连接
mongosh --host 192.168.1.100 --port 27017
3、常用操作命令
命令 | 说明 |
---|---|
show dbs |
查看所有数据库 |
db |
查看当前数据库 |
use <dbname> |
切换或创建数据库 |
show collections |
查看当前库集合 |
exit |
退出 Shell |
四、数据库与集合管理
1、数据库操作
-
创建数据库
使用
use <dbname>
命令,若数据库不存在则自动创建,但需插入数据后才会显示在列表中:use runoob db.runoob.insertOne({ name: "zhangsan" })
-
删除数据库
use mydb db.dropDatabase()
-
系统内置数据库
- admin:存储用户权限和全局配置,认证后可执行跨库操作。
- config:分片集群元数据存储,记录分片信息和块分布。
- local:存储本地节点数据(如副本集状态、操作日志),不参与复制。
2、集合操作
-
创建集合
显式创建集合并指定选项(如固定大小、验证规则):
db.createCollection("users", { capped: true, size: 10485760, // 10MB max: 5000, validator: { $jsonSchema: { bsonType: "object", required: ["name", "email"], properties: { name: { bsonType: "string" }, email: { bsonType: "string", pattern: ".+@.+" } } } }, validationLevel: "strict" })
-
重命名集合
使用
renameCollection
命令,支持跨数据库重命名:db.adminCommand({ renameCollection: "test.old_users", to: "production.new_users", dropTarget: true // 若目标存在则删除 })
-
删除集合
db.users.drop() // 永久删除,不可恢复
五、文档操作核心指南
1、插入文档
-
insertOne() :插入单个文档,返回
insertedId
:db.users.insertOne({ name: "Alice", age: 25, city: "New York" })
-
insertMany() :插入多个文档,返回数组形式的
insertedId
:db.users.insertMany([ { name: "Bob", age: 30, city: "Los Angeles" }, { name: "Charlie", age: 35, city: "Chicago" } ])
2、查询文档
-
find () 方法
- 查询所有文档:
db.users.find()
- 条件查询:
db.users.find({ age: { $gt: 30 } })
- 投影控制返回字段:
db.users.find({ age: { $gt: 25 } }, { name: 1, age: 1, _id: 0 })
- 格式化输出:
db.users.find().pretty()
- 查询所有文档:
-
findOne () 方法:返回单个匹配文档(首个):
db.users.findOne({ name: "Alice" })
3、更新文档
-
updateOne():更新单个匹配文档:
db.users.updateOne( { name: "Alice" }, { $set: { age: 26, city: "Boston" } }, { upsert: true } // 若不存在则插入新文档 )
-
updateMany():更新所有匹配文档:
db.users.updateMany( { age: { $lt: 30 } }, { $set: { status: "active" } } )
-
replaceOne():完全替换单个文档:
db.users.replaceOne( { name: "Bob" }, { name: "Bob", age: 31, city: "San Francisco", status: "inactive" } )
4、删除文档
-
deleteOne():删除单个匹配文档:
db.users.deleteOne({ name: "Alice" })
-
deleteMany():删除所有匹配文档:
db.users.deleteMany({ status: "inactive" })
-
findOneAndDelete():查找并删除单个文档,返回删除的文档:
const deletedDoc = db.users.findOneAndDelete({ name: "Charlie" })
六、数据备份与恢复(mongodump/mongorestore)
1、安装备份工具
rpm -ivh mongodb-database-tools-rhel70-x86_64-100.12.0.rpm
2、数据备份
-
备份所有数据库
mongodump --out /data/backup
备份文件存储在
/data/backup
目录,每个数据库对应一个子目录。 -
备份指定数据库
mongodump -d test --out /data/backup/test_db
-
备份指定集合
mongodump -d test -c users --out /data/backup/test_users
3、数据恢复
-
恢复所有数据库
mongorestore --dir /data/backup
-
恢复指定数据库到新库
mongorestore -d new_test --dir /data/backup/test
-
恢复时删除现有数据
mongorestore --drop --dir /data/backup/test
七、用户管理与权限控制
1、用户角色体系
MongoDB 的权限系统基于角色(Role)和数据库(Database),核心角色分类:
- 数据库用户角色 :
read
、readWrite
- 数据库管理角色 :
dbAdmin
、dbOwner
、userAdmin
- 集群管理角色 :
clusterAdmin
、clusterManager
、clusterMonitor
- 超级用户角色 :
root
(包含所有权限)
2、用户操作指南
-
创建用户
在
testdb
数据库创建具有读写权限的用户:use testdb db.createUser({ user: "app_user", pwd: "secure_password", roles: [{ role: "readWrite", db: "testdb" }] })
-
认证用户
db.auth("app_user", "secure_password") // 返回 1 表示认证成功
-
启用身份验证
编辑配置文件
/etc/mongod.conf
,添加:security: authorization: "enabled"
重启服务使配置生效:
systemctl restart mongod
-
删除用户
use testdb db.dropUser("app_user")