MongoDB 数据库应用
目录
一、 什么是 MongoDB
1. 主要特点
2. MongoDB 概念解析
3. 完整术语列表
二、 MongoDB 安装
1.安装依赖文件
2.解压与配置
3. 创建数据目录
4. 编译 OpensSSL
5. 启动 MOngoDB
三、 MongoDB Shell
1. 安装 MongoDB Shell
2. 验证 MongoDB Shell
四、 数据库管理
1. 查看与切换数据库
2. 创建与删除数据库
五、 集合管理
1. 查看集合
2. 创建集合
3. 更新集合名
4. 删除集合
六、 文档操作
1. 插入文档
2. 查询文档
3. 删除文档
4. 更新文档
先插入测试数据
七、 MongoDB 备份(mongodump)与恢复(mongorestore)
1. 安装备份与恢复命令
2. MongoDB 数据备份
3. MOngoDB 数据恢复
八、 MOngoDB 用户管理
1. 创建用户(切换到 testdb 数据库)
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");