MongoDB 数据库应用

目录

[一、 什么是 MongoDB](#一、 什么是 MongoDB)

[1. 主要特点](#1. 主要特点)

[2. MongoDB 概念解析](#2. MongoDB 概念解析)

[3. 完整术语列表](#3. 完整术语列表)

[二、 MongoDB 安装](#二、 MongoDB 安装)

1.安装依赖文件

2.解压与配置

[3. 创建数据目录](#3. 创建数据目录)

[4. 编译 OpensSSL](#4. 编译 OpensSSL)

[5. 启动 MOngoDB](#5. 启动 MOngoDB)

[三、 MongoDB Shell](#三、 MongoDB Shell)

[1. 安装 MongoDB Shell](#1. 安装 MongoDB Shell)

[2. 验证 MongoDB Shell](#2. 验证 MongoDB Shell)

[四、 数据库管理](#四、 数据库管理)

[1. 查看与切换数据库](#1. 查看与切换数据库)

[2. 创建与删除数据库](#2. 创建与删除数据库)

[五、 集合管理](#五、 集合管理)

[1. 查看集合](#1. 查看集合)

[2. 创建集合](#2. 创建集合)

[3. 更新集合名](#3. 更新集合名)

[4. 删除集合](#4. 删除集合)

[六、 文档操作](#六、 文档操作)

[1. 插入文档](#1. 插入文档)

[2. 查询文档](#2. 查询文档)

[3. 删除文档](#3. 删除文档)

[4. 更新文档](#4. 更新文档)

先插入测试数据

[七、 MongoDB 备份(mongodump)与恢复(mongorestore)](#七、 MongoDB 备份(mongodump)与恢复(mongorestore))

[1. 安装备份与恢复命令](#1. 安装备份与恢复命令)

[2. MongoDB 数据备份](#2. MongoDB 数据备份)

[3. MOngoDB 数据恢复](#3. MOngoDB 数据恢复)

[八、 MOngoDB 用户管理](#八、 MOngoDB 用户管理)

[1. 创建用户(切换到 testdb 数据库)](#1. 创建用户(切换到 testdb 数据库))

[2. 启用认证(修改mongod.conf)](#2. 启用认证(修改mongod.conf))

3.认证登录

4.删除用户


一、 什么是 MongoDB

MongoDB 是一个文档型数据库,数据以类似JSON 的文档形式存储。

MongoDB 的设计理念是为了应对大数据量、高性能和灵活性需求。

MongoDB使用集合(Collections)来组织文档(Documents),每个文档都是由键值对组成的。

  • 数据库(Database):存储数据的容器,类似于关系型数据库中的数据库。
  • 集合(Collection):数据库中的一个集合,类似于关系型数据库中的表。
  • 文档(Document):集合中的一个数据记录,类似于关系型数据库中的行(row),以 BSON 格式存储。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,文档类似于JSON 对象,字段值可以包含其他文档,数组及文档数组:

1. 主要特点

  • 文档导向的存储:MongoDB 是一个面向文档的数据库,它以JSON-1ike 的格式存储数据,使得数据结构更加灵活和丰富。
  • 索引优化查询:MongoDB 允许用户为文档中的任意属性创建索引,例如FirstName 和 Address,从而提高查询效率和排序性能。
  • 数据镜像与扩展性:通过本地或网络创建数据的副本,MongoDB 实现了强大的数据冗余和扩展能力。
  • 水平扩展与分片:面对增加的负载,MongoDB 可以通过分片技术将数据分布到计算机网2络中的其他节点上,实现水平扩展。
  • 强大的查询语言: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、AVA、C++、PHP 和C#。

2. MongoDB 概念解析

不管我们学习什么数据库都应该学习其中的基础概念,在 MongoDB 中基本的概念是文档、集合、数据库,下面我们挨个介绍。

下表将帮助您更容易理解 MongoDB 中的一些概念:

|-------------|---------------|----------------------------|
| 5QL 术语/概念 | MongoDB 术语/概念 | 解释/说明 |
| database | database | 数据库 |
| table | collection | 数据库表/集合 |
| row | document | 数据记录行/文档 |
| column | field | 数据字段/域 |
| index | index | 索引 |
| table joins | | 表连接,MongoDB 不支持 |
| primary key | primary key | 主键, MongoDB 自动将 id 字段设置为主键 |

3. 完整术语列表

  • 文档(Document):MongoDB 的基本数据单元,通常是一个JSON-like 的结构,可以包含多种数据类型。
  • 集合(Collection):类似于关系型数据库中的表,集合是一组文档的容器。在 MongoDB中,一个集合中的文档不需要有一个固定的模式。
  • 数据库(Database):包含一个或多个集合的MongoDB 实例:
  • BSON:Binary JSON 的缩写,是MongoDB 用来存储和传输文档的二进制形式的 JSON。
  • 索引(Index):用于优化查询性能的数据结构,可以基于集合中的一个或多个字段创建索引。
  • 分片(Sharding):一种分布数据到多个服务器(称为分片)的方法,用于处理大数据集和高吞吐量应用。
  • 副本集(Replica Set):一组维护相同数据集的 MongoDB 服务器,提供数据的冗余备份和高可用性。
  • 主节点(Primary):副本集中负责处理所有写入操作的服务器。
  • 从节点(Secondary):副本集中的服务器,用于读取数据和在主节点故障时接管为主节点。
  • MongoDB Shell:MongoDB 提供的命令行界面,用于与 MongoDB 实例交互。
  • 聚合框架(Aggregation Framework):用于执行复杂的数据处理和聚合操作的一系列操作。
  • Map-Reduce:一种编程模型,用于处理大量数据集的并行计算。
  • GridFs:用于存储和检索大于 BSON 文档大小限制的文件的规范。
  • 0bjectId:MongoDB 为每个文档自动生成的唯一标识符。
  • CRUD 操作:创建(Create)、读取(Read)、更新(Update)、删除(Delete)操作。
  • 事务(Transactions):从 MongoDB 4.0 开始支持,允许一组操作作为一个原子单元执行。
  • 操作符(0perators):用于查询和更新文档的特殊字段。
  • 连接(Join):MongoDB 允许在查询中使用 $lookup 操作符来实现类似 SQL 的连接操作
  • TTL(Time-To-Live):可以为集合中的某些字段设置 TTL,以自动删除旧数据。
  • 存储引擎(Storage Engine):MongoDB 用于数据存储和管理的底层技术,如WiredTiger和 MongoDB 的旧存储引擎 MMAPv1。
  • MongoDB Compass:MongoDB 的图形界面工具,用于可视化和管理 MongoDB 数据。
  • MongoDB Atlas:MongoDB 提供的云服务,允许在云中托管 MongoDB 数据库。

二、 MongoDB 安装

1.安装依赖文件

复制代码
dnf install libcurl openssl -y

2.解压与配置

复制代码
# 解压安装包
tar -zxvf mongodb-linux-x86_64-rhel8-8.0.8.tgz  
# 移动到指定目录
mv mongodb-linux-x86_64-rhel8-8.0.8 /usr/local/mongodb  

# 添加环境变量(永久生效)
echo 'export PATH=/usr/local/mongodb/bin:$PATH' >> /etc/profile  
source /etc/profile  

3. 创建数据目录

复制代码
mkdir -p /var/lib/mongo /var/log/mongodb  
chown `whoami` /var/lib/mongo /var/log/mongodb  # 赋予当前用户权限  

4. 编译 OpensSSL

复制代码
dnf install -y gcc make perl  
tar xzf openssl-1.1.1w.tar.gz  
cd openssl-1.1.1w  
./config --prefix=/opt/openssl111 --openssldir=/opt/openssl111/ssl  
make -j$(nproc) && make install  

# 配置环境变量
echo 'export LD_LIBRARY_PATH=/opt/openssl111/lib:$LD_LIBRARY_PATH' | sudo tee /etc/profile.d/openssl111.sh  
source /etc/profile.d/openssl111.sh  

5. 启动 MOngoDB

复制代码
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork  
# 验证启动:查看日志或进程,出现"child process started successfully"则成功  

三、 MongoDB Shell

1. 安装 MongoDB Shell

复制代码
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. 验证 MongoDB Shell

复制代码
mongosh  # 本地默认连接(127.0.0.1:27017)  
# 成功提示:Connected to: mongodb://127.0.0.1:27017/...  

四、 数据库管理

1. 查看与切换数据库

复制代码
show dbs;  // 列出所有数据库(需包含数据才会显示)  
use runoob;  // 切换/创建数据库(无数据时show dbs不显示)  
db;  // 查看当前数据库  

2. 创建与删除数据库

复制代码
// 插入数据自动创建数据库
db.runoob.insertOne({name: "zhangsan"});  
show dbs;  // 此时runoob数据库可见  

// 删除数据库(先切换到目标库)
use myDatabase;  
db.dropDatabase();  

五、 集合管理

1. 查看集合

复制代码
show collections;  // 或 show tables  

2. 创建集合

复制代码
db.createCollection("myComplexCollection", {  
  capped: true,  // 固定大小  
  size: 10485760,  // 10MB  
  max: 5000,  // 最多5000条  
  validator: {  // 文档校验  
    $jsonSchema: {  
      bsonType: "object",  
      required: ["name", "email"],  
      properties: {  
        name: { bsonType: "string" },  
        email: { bsonType: "string", pattern: ".+@.+" }  
      }  
    }  
  }  
});  

3. 更新集合名

复制代码
db.adminCommand({  
  renameCollection: "test.oldCollection",  
  to: "test.newCollection"  
});  

4. 删除集合

复制代码
db.kgc.drop();  // 删除kgc集合,返回true则成功  

六、 文档操作

1. 插入文档

复制代码
db. myCollection.insertOne({
name: "Alice",
age:25,
city: "New York"
}):
#返回结果
{"acknowledged": true,
"insertedId": 0bjectId("60c72b2f9bld8b5a5f8e2b2d")}

2. 查询文档

复制代码
find():批量查询

// 查询所有文档,仅返回name和age(排除_id)
db.myCollection.find(
  {}, 
  { name: 1, age: 1, _id: 0 }  
).pretty();  // 格式化输出  

findOne():单文档查询

// 查询name为"Alice"的文档
db.myCollection.findOne({ name: "Alice" });  

3. 删除文档

复制代码
deleteOne():删单条

db.myCollection.deleteOne({ name: "Alice" });  

deleteMany():删多条

db.myCollection.deleteMany({ name: "Bob" });  

findOneAndDelete():删除并返回

db.myCollection.findOneAndDelete({ name: "Charlie" });  

4. 更新文档

先插入测试数据

复制代码
db.myCollection.insertMany([  
  { name: "Alice", age: 25, status: "inactive" },  
  { name: "Bob", age: 30, status: "active" }  
]);  
复制代码
updateOne():更新单条

db.myCollection.updateOne(  
  { name: "Alice" },  
  { $set: { age: 26 } }  
);  

updateMany():更新多条

db.myCollection.updateMany(  
  { age: { $lt: 30 } },  
  { $set: { status: "active" } }  
);  

replaceOne():替换文档

db.myCollection.replaceOne(  
  { name: "Bob" },  
  { name: "Bob", age: 31, city: "New York" }  
);  

findOneAndUpdate():更新并返回

db.myCollection.findOneAndUpdate(  
  { name: "Charlie" },  
  { $set: { age: 36 } },  
  { returnDocument: "after" }  // 返回更新后的数据  
);  

七、 MongoDB 备份(mongodump)与恢复(mongorestore)

1. 安装备份与恢复命令

复制代码
rpm -ivh mongodb-database-tools-rhel70-x86_64-100.12.0.rpm  

2. MongoDB 数据备份

复制代码
# 备份test数据库到/data/backup
mongodump -h 127.0.0.1:27017 -d test -o /data/backup  

3. MOngoDB 数据恢复

复制代码
# 从备份恢复test数据库(覆盖现有数据)
mongorestore -h 127.0.0.1:27017 -d test --drop /data/backup/test  

八、 MOngoDB 用户管理

1. 创建用户(切换到 testdb 数据库)

复制代码
use testdb;  
db.createUser({  
  user: "testuser",  
  pwd: "password123",  
  roles: [  
    { role: "readWrite", db: "testdb" },  
    { role: "read", db: "testdb" }  
  ]  
});  

2. 启用认证(修改mongod.conf

复制代码
security:  
  authorization: "enabled"  

3.认证登录

复制代码
mongosh --host 127.0.0.1:27017 -u "testuser" -p "password123" --authenticationDatabase "testdb"  

4.删除用户

复制代码
use testdb;  
db.dropUser("testuser");  
相关推荐
Sunshine~L&H2 小时前
Mac 上使用 mysql -u root -p 命令,出现“zsh: command not found: mysql“?如何解决
数据库·mysql·macos
chanalbert4 小时前
数据库连接池深度研究分析报告
数据库·spring
snpgroupcn4 小时前
泰国零售巨头 CJ Express 借助 SAP 内存数据库实现高效数据管理
数据库·express·零售
明月看潮生6 小时前
青少年编程与数学 01-011 系统软件简介 19 SSMS 数据库管理工具
数据库·青少年编程·编程与数学
blammmp6 小时前
Redis : set集合
数据库·redis·缓存
翔云1234566 小时前
精准测量 MySQL 主从复制延迟—pt-heartbeat工具工作原理
数据库·mysql
厚衣服_36 小时前
第15篇:数据库中间件高可用架构设计与容灾机制实现
java·数据库·中间件
昂子的博客7 小时前
Springboot仿抖音app开发之消息业务模块后端复盘及相关业务知识总结
java·spring boot·redis·后端·mysql·mongodb·spring
明月看潮生7 小时前
青少年编程与数学 01-011 系统软件简介 13 Microsoft SQL Server数据库
数据库·microsoft·青少年编程·系统软件
LUCIAZZZ8 小时前
项目拓展-Jol分析本地对象or缓存的内存占用
java·开发语言·jvm·数据库·缓存·springboot