MongleDB数据库应用

一. 什么是 MongoDB

在这里插入图片描述

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

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

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

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

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

1. 主要特点

特点含义
文档导向的存储:MongoDB 是一个面向文档的数据库,它以JSON-like 的格式存储数据,使得数据结构更加灵活和丰富
索引优化查询MongoDB 允许用户为文档中的任意属性创建索引,例如FirstName 和 Address,从而提高查询效率和排序性能
数据镜像与扩展性通过本地或网络创建数据的副本,MongoD8 实现了强大的数据冗余和扩展能力
水平扩展与分片面对增加的负载,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. Mongo DB 概念解析

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

在这里插入图片描述

3. 完整术语列表

术语解释
文档(Document)MongoDB 的基本数据单元,通常是一个JSON-like 的结构,可以包含多种数据类型
集合(Co1lection)类似于关系型数据库中的表,集合是一组文档的容器。在 MongoDB中,一个集合中的文档不需要有一个固定的模式
数据库(Database)包含一个或多个集合的MongoDB 实例
BSONBinary JSON 的缩写,是MongoDB 用来存储和传输文档的二进制形式的 JSON
索引(Index)用于优化查询性能的数据结构,可以基于集合中的一个或多个字段创建索引
分片(Sharding)一种分布数据到多个服务器(称为分片)的方法,用于处理大数据集和高吞吐量应用
副本集(Replica Set)一组维护相同数据集的 MongoDB 服务器,提供数据的冗余备份和高可用性
主节点(Primary)副本集中负责处理所有写入操作的服务器
从节点(Secondary)副本集中的服务器,用于读取数据和在主节点故障时接管为主节点
MongoDB ShellMongoDB 提供的命令行界面,用于与 MongoDB 实例交瓦
聚合框架(Aggregation Framework)用于执行复杂的数据处理和聚合操作的一系列操作
objectIdMongoDB 为每个文档自动生成的唯一标识符
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 CompassMongoDB 的图形界面工具,用于可视化和管理 MongoDB 数据
MongoDB AtlasMongoDB 提供的云服务,允许在云中托管 MongoDB 数据库

二. MongoDB 安装

##安装依赖包
[root@localhost ~]# dnf -y install libcurl openssl

##解压安装包
[root@localhost ~]# tar zxf mongodb-linux-x86_64-rhel8-8.0.8.tgz

##将解压包拷贝到指定目录
[root@localhost ~]# mv mongodb-linux-x86_64-rhel88-8.0.8 /usr/local/mongodb

##为 mongoDB 可执行文件bin做链接文件
[root@localhost ~]# ln -s /usr/local/mongodb/bin/* /usr/local/bin/

##创建数据存储目录
[root@localhost ~]# mkdir -p /var/lib/mongo

##创建日志文件目录
[root@localhost ~]# mkdir -p /var/log/mongodb

##安装依赖包openssl
[root@localhost ~]# dnf -y install gcc perl 

##解压安装包
[root@localhost ~]# tar zxf openssl-1.1.1w.tar.gz

##切换解压包
[root@localhost ~]# cd openssl-1.1.1w

##配置
[root@localhost openssl-1.1.1w]# ./config --prefix=/opt/openssl11 --openssldir=/opt/openssl11/ssl

##编译内核2
[root@localhost openssl-1.1.1w]# make -j2

##安装
[root@localhost openssl-1.1.1w]# make install

##设置openssl的环境变量
[root@localhost ~]# vim /etc/profile
export LD_LIBRARY_PATH=/opt/openssl11/lib:$LD_LIBRARY_PATH

##执行脚本文件
[root@localhost ~]# source /etc/profile

##启动 Mongond 服务
[root@localhost ~]# mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb/mongod.log --fork

在这里插入图片描述

三. MongoDB Shell

MongoDB Shell 是 MongoDB 提供的官方交互式界面,允许用户与 MongoDB 数据库进行交互、执行命令和操作数据库

MongoDB Shell 是基于 JavaScript 的,允许用户直接在命令行或者脚本中使用 JavaScript 语言来操作 MongoDB 数据库

1. 安装 MongoDB Shell

##解压安装包
[root@localhost ~]# tar zxf mongosh-2.5.0-linux-x64-openssl3.tgz 

##切换解压包
[root@localhost ~]# cd mongosh-2.5.0-linux-x64-openssl3

##切换bin目录
[root@localhost mongosh-2.5.0-linux-x64-openssl3]# cd bin/

##
[root@localhost bin]# cp mongosh /usr/local/bin/

[root@localhost bin]# cp mongosh_crypt_v1.so /usr/local/lib

2. 验证 MongoDB Shell

打开你的终端并使用 mongosh 命令连接到 MongoDB 服务器:

mongosh–host –port

说明:

命令含义
mongosh启动 MongoDB Shell 命令行工具
–host指定 MongoDB 服务器的主机名或 IP 地址
< hostname >MongoDB 服务器的主机名(如 localhost)或 IP 地址(如 127.0.0.1)
–port指定 MongoDB 服务器的端口号
< port >MongoDB 服务器监听的端口号,默认端口是 27017

输入 mongosh 默认连接本地 mongodb 数据库,看到以下信息说明登录成功,warnings警告为优化提醒,可以暂时忽略,如若生产环境部署需要处理

[root@localhost ~]# mongosh

在这里插入图片描述

四. 数据库管理

1. 查看数据库列表

要查看当前 MongoDB 实例中所有数据库的列表,可以使用show dbs 命令:

> show dbs

在这里插入图片描述

要查看当前正在使用的数据库,可以使用db命令:

> db

在这里插入图片描述

2. 创建数据库

在MongoDB中,数据库的创建是一个简单的过程,当你首次向MongoDB 中插入数据时,如果数据库不存在,MongoDB 会自动创建它

我们只需选择一个数据库名称,并开始向其中插入文档即可

当你使用 use命令来指定一个数据库时,如果该数据库不存在,MongoDB 将自动创建它。MongoDB 创建数据库的语法格式如下:

Use DATABASE NAME

如果数据库不存在,则创建数据库,否则切换到指定数据库

实例

以下实例我们创建了数据库 mytest:

在这里插入图片描述
执行use mytest 命令后,MongoDp 将创建名为 mytest 的新数据库。此时,你可以开始在这个数据库中创建集合和插入文档

如果你想查看所有数据库,可以使用show dbs 命令:

在这里插入图片描述

可以看到,我们刚创建的数据库 mytest 并不在数据库的列表中,要显示它,我们需要向 mytest 数据库插入一些数据

在这里插入图片描述

3. 删除数据库

如果你需要删除数据库,可以使用 db.dropDatabase()方法:

在这里插入图片描述

示例

在这里插入图片描述

4. 默认数据库

MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,数据将存放在 test数据库中

当您通过 shell 连接到 MongoDB 实例时,如果未使用 use 命令切换到其他数据库,则会默认使用 test 数据库

例如,在启动 MongoDB 实例并连接到 MongoDB shell 后,如果您开始插入文档而未显式指定数据库,MongoDB 将默认使用 test 数据库

5. 系统内置数据库

在MongoDB 中,admin、config 和 local 是三个特殊的系统内置数据库

数据库:存储所有数据库的用户身份信息和全局权限(如root用户)。用admin户必须通过admin 数据库认证后才能执行跨库管理操作

config 数据库:仅在分片集群环境中存在。存储分片信息、块(chunk)分布、集合分片策略等关键元数据

local 数据库:存储当前节点的副本集状态、操作日志(oplog)等本地数据。数据不会被复制到其他节点,仅存在于当前实例

在这里插入图片描述

五. 集合管理

1. 查看集合

查看当前库已有集合,可以使用 showcollections 或 show tables 命令

>	show collections
>	show tables

在这里插入图片描述

2. 创建集合

MongoDB 中 createCollection() 使用方法来创建集合

语法格式:

db.createCollection (name, options)

参数说明:

参数说明
name要创建的集合名称
options可选参数,指定有关内存大小及索引的选项

options 可以是如下参数:

参数名类型描述示例值
capped布尔型是否创建一个固定大小的集合true
size数值集合的最大大小(以字节为单位)。仅在 capped为true 时有效10485760(10MB)
max数值集合中允许的最大文档数。仅在capped 为true时有效5000
vaildator对象用于文档验证的表达式{ $jsonSchema:{…}}
validationLevel字符串指定文档验证的严格程度。“off”:不进行验证。strict":插入和更新操作都必须通过验证(默认)moderate”:仅现有文档更新时必须通过验证,插入新文档时不需要strict
vaildationAction对象为集合指定存储引擎配置{ wiredTiger: { … }}
collation对象指定集合的默认排序规则{locale:enstrength:2}

在插入文档时,MongoDB 首先检查固定集合的size字段,然后检查 max 字段

使用这些选项创建一个集合的实例:

在这里插入图片描述

这个例子创建了一个集合,具有以下特性:

固定大小,最大 10MB,最多存储 5000个文档

必须是有效文档必须包含 name和email字段,其中name必须是字符串,email的电子邮件格式

验证级别为严格,验证失败将阻止插入或更新

使用 WiredTiger 存储引擎,指定块压缩器为 zstd

默认使用英语排序规则

实例

在 test 数据库中创建 aaa 集合:

在这里插入图片描述

注意: 在 MongoDB 中,集合只有在内容插入后才会创建,就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建

3. 更新集合名

在 MongoDB 中,不能直接通过命令来重命名集合

MongoDB 可以使用 renameCollection!方法来来重命名集合

renameCollection 命令的语法:

db. adminCommand({
renameCollection:"sourceDb.sourceCollectionto:"targetDb.targetCollectiondropTarget:<boolean> })

参数说明:

参数说明
renameCollection要重命名的集合的完全限定名称(包括数据库名)
to目标集合的完全限定名称(包括数据库名)
dropTarget(可选)布尔值。如果目标集合已经存在,是否除目标集合。默认值为false

示例

假设你要将 test 数据库中的 oldCollection 重命名为 newCollection,可以按以步骤进行:
**
①:确保已连接到 test 数据库**

> use test

②:运行 renameCollection 命令

db. adminCommand({
renameCollection:"test.oldCollection",to:"test.newCollection”});

如果你要将集合重命名到另一个数据库,例如将 test 数据库中的 oldCollection 重命名为 production 数据库中的 newCollection,可以这样做:

db. adminCommand({
renameCollection:"test.oldCollection"to:"production.newCollection"});

在这里插入图片描述

4. 删除集合

MongoDB 中使用 drop()方法来删除集合

drop()方法可以永久地从数据库中删除指定的集合及其所有文档,这是一个不可逆的操作因此需要谨慎使用

语法格式:

db.collection 名称.drop()

如果成功删除选定集合,则 drop()方法返回 true,否则返回 false

实例

在这里插入图片描述

六. 文档操作

1. 插入文档

文档的数据结构和 JSON 基本一样。所有存储在集合中的数据都是 BSON 格式。BSON是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称

常用的插入文档方法包括:

方法用途是否弃用
insertMany()插入多个文档
insert()插入单个或多个文档
save()插入或更新文档

在 MongoDB 中,插入文档时如果集合(Collection)不存在,数据库会自动创建该集合。这是 MongoDB 的默认行为,也是其无模式设计(Schema-less)的核心特性之一

(1)insertOne()

insertOne()方法用于在集合中插入单个文档

db.collection 名称.insertOne(document, options)
参数说明
document要插入的单个文档
options(可选)一个可选参数对象,可以包含writeConcern 和 bypassDocumentValidation 等

示例

在这里插入图片描述

(2)insertMany()

insertMany()方法用于在集合中插入多个文档

db.collection.insertMany(documents, options)
参数说明
documents要插入的文档数组
options(可选)一个可选参数对象,可以包含 ordered、writeConcern 和 bypassDcumentValidation 等

在这里插入图片描述

2. 查询文档

MongoDB 查询文档使用find()、findOne()方法

(1)find()

MongoDB 查询数据的语法格式如下:

db.collection.find(query, projection)
参数含义
query用于查找文档的查询条件。默认为{ },即匹配所有文档
projection(可选)指定返回结果中包含或排除的字段

查找所有文档

在这里插入图片描述

按条件查找文档

在这里插入图片描述

说明:

$gt 是MongoDB 的比较操作符,表示"大于"(Greater Than)

这个条件的作用是筛选出 age 字段值大于 25 的文档

类似的其他比较操作符:

$lt(小于)$gte(大于等于)$lte(小于等于)$eq(等于)$ne(不等于)

以易读的方式读取数据

在这里插入图片描述

(2)fineOne()

find0ne ()方法用于査找集合中的单个文档.如果找到多个匹配的文档.它只返回第一个

语法:

db.collection.findOne (query, projection)
参数含义
query用于查找文档的查询条件。默认为{ },即匹配所有文档
projection(可选)指定返回结果中包含或排除的字段

查找单个文档

在这里插入图片描述

3. 删除文档

常用的删除文档方法包括 delete0ne()、deleteMany()以及 find0neAndDelete()

(1)deleteOne()

delete0ne()方法用于删除匹配过滤器的单个文档

语法:

db.collection.deleteOne (filter, options)
参数含义
filter用于查找要删除的文档的查询条件
options(可选)一个可选参数对象

在这里插入图片描述

(2)deleteMany()

deleteMany()方法用于删除所有匹配过滤器的文档

语法::

db. collection.deleteMany(filter, options)
参数含义
filter用于查找要删除的文档的查询条件
options(可选)一个可选参数对象

在这里插入图片描述

(3)findOneAndDelete()

findOneAndDelete()方法用于查找并删除单个文档,并可以选择返回删除的文档

语法:

db.collection.findOneAndDelete(filter, options)
参数含义
filter用于查找要删除的文档的查询条件
options可选参数对象,如projection、sort等

在这里插入图片描述

find0neAndDelete 返回被删除的文档,如果找不到匹配的文档,则返回 null

4. 更新文档

在 MongoDB 中,更新文档的操作可以使用多种方法实现,常用的方法包括updateOne()、updateMany()、replace0ne()和findOneAndUpdate()

(1)updateOne()

update0ne()方法用于更新匹配过滤器的单个文档

语法:

db. collection.updateOne (filter,update.options)
参数含义
filter用于查找文档的查询条件
update指定更新操作的文档或更新操作符
options可选参数对象,如upsert、arrayFilters

在这里插入图片描述

(2)updateMany()

updateMany()方法用于更新所有匹配过滤器的文档

语法:

db.collection.updateMany(filter, update, options)
参数含义
filter用于查找文档的查询条件
update指定更新操作的文档或更新操作符
options可选参数对象,如upsert、arrayFilters

在这里插入图片描述

七. MongoDB备份与恢复

(1)安装备份与恢复命令

[root@localhost ~]# rpm -ivh mongodb-database-tools-rhel70-x86_64-100.12.0.rpm 

在这里插入图片描述

(2) MongoDB 数据备份

语法格式

>mongodump -h dbhost-d dbname o dbdirectory

在这里插入图片描述

对数据备份

在这里插入图片描述

在这里插入图片描述

(3)MongoDB 数据恢复

mongodb 使用 mongorestore 命令来恢复备份的数据

mongorestore命令脚本语法如下:

>mongorestore -h<hostname><:port>-d dbname<path>

在这里插入图片描述

对数据删除,再恢复

在这里插入图片描述

恢复

在这里插入图片描述

恢复之后,zhangsan的数据已被恢复回来

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值