mongodb

发布于:2025-06-29 ⋅ 阅读:(21) ⋅ 点赞:(0)

一.什么是MongoDB

在这里插入图片描述
MongoDB是一个文档型数据库,数据以类似JSON的文档形式存储。
MongoDB的设计理念是为了应对大数据量、高性能和灵活性需求。
MongoDB使用集合(Collections)来组织文档(Documents),每个文档都是由键值对组成

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

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

1.主要特点

文档导向的存储:MongoDB是一个面向文档的数据库,它以JSON-like的格式存储数
据,使得数据结构更加灵活和丰富。

索引优化查询:MongoDB允许用户为文档中的任意属性创建索引,例如FirstName和A
ddress,从而提高查询效率和排序性能。

数据镜像与扩展性:通过本地或网络创建数据的副本,MongoDB实现了强大的数据冗余
和扩展能力。

水平扩展与分片:面对增加的负载,MongoDB可以通过分片技术将数据分布到计算机网
络中的其他节点上,实现水平扩展。

强大的查询语言:MongoDB使用JSON格式的查询语法,支持复杂的查询表达式,包括
对内嵌对象和数组的查询。

数据更新:利用updateO命令,MongoDB能够替换整个文档或更新指定的数据字段,提供了灵活的数据更新方式。

MapReduce批量处理:MongoDB的MapReduce功能专为大规模数据处理和聚合操作设
计,通过Map函数的emit(key,value)调用和Reduce函数的逻辑处理,实现高效的
数据汇总。

MapReduce脚本编写:Map和Reduce函数使用JavaScript编写,可以通过db.ru
nCommand 或 mapreduce命令在MongoDB中执行。

GridFS大文件存储:GridFS是MongoDB内置的功能,用于存储和检索大于BSON文
档大小限制的文件,如图片和视频。

服务端脚本执行:MongoDB允许在服务端执行JavaScript脚本,提供了直接在服务端
执行或存储函数定义以供后续调用的能力。

多语言支持:MongoDB提供了对多种编程语言的支持,包括但不限于RUBY、PYTHON、JAVA、C++、PHP 和 C#。

2.MongoDB 概念解析

不管我们学习什么数据库都应该学习其中的基础概念,在MongoDB中基本的概念是文
档、集合、数据库,下面我们挨个介绍。
下表将帮助您更容易理解MongoDB中的一些概念:

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

在这里插入图片描述

3.完整术语列表

文档(Document):MongoDB的基本数据单元,通常是一个JSON-like的结构,可以包含
多种数据类型。
集合(Collection):类似于关系型数据库中的表,集合是一组文档的容器。在MongoDB
中,一个集合中的文档不需要有一个固定的模式。
数据库(Database):包含一个或多个集合的MongoDB实例。
BSON:BinaryJSON的缩写,是MongoDB用来存储和传输文档的二进制形式的JSON。
索引(Index):用于优化查询性能的数据结构,可以基于集合中的一个或多个字段创建索
引。
分片(Sharding):一种分布数据到多个服务器(称为分片)的方法,用于处理大数据集和
高吞吐量应用。
副本集(ReplicaSet):一组维护相同数据集的MongoDB服务器,提供数据的冗余备份
和高可用性
主节点(Primary):副本集中负责处理所有写入操作的服务器。
从节点(Secondary):副本集中的服务器,用于读取数据和在主节点故障时接管为主节点。
MongoDBShell:MongoDB提供的命令行界面,用于与MongoDB实例交互。
聚合框架(AggregationFramework):用于执行复杂的数据处理和聚合操作的一系列操作。
Map-Reduce:一种编程模型,用于处理大量数据集的并行计算。

GridFS:用于存储和检索大于BSON文档大小限制的文件的规范。

ObjectId:MongoDB为每个文档自动生成的唯一标识符。
CRUD 操作:创建(Create)、读取(Read)、更新(Update)、删除(Delete》操作。
事务(Transactions):从MongoDB4.0开始支持,允许一组操作作为一个原子单元执行。
操作符(Operators):用于查询和更新文档的特殊字段。
连接(Join):MongoDB允许在查询中使用$1ookup操作符来实现类似SQL的连接操作。
TTL(Time-To-Live):可以为集合中的某些字段设置TTL,以自动删除旧数据。
存储引擎(StorageEngine):MongoDB用于数据存储和管理的底层技术,如WiredTiger
和MongoDB的旧存储引擎MMAPvl。
N
MongoDBCompass:MongoDB的图形界面工具,用于可视化和管理MongoDB数据。
1
MongoDBAtlas:MongoDB提供的云服务,允许在云中托管MongoDB数据库。

二.MongoDB安装

MongoDB的安装过程简单直观,便于用户快速部署和使用。MongoDB提供了linux各
个发行版本64位的安装包,你可以在官网下载安装包。

安装前我们需要安装各自的linux平台依赖包
在这里插入图片描述
解压主程序安装包
在这里插入图片描述
将应用程序移动到指定目录中
在这里插入图片描述
MongoDB的可执行文件在/bin目录中所以可以做链接文件或者添加到PATH中或者/etc/profile中
在这里插入图片描述
创建数据库目录
默认情况下MongoDB启动后会初始化以下两个目录:
数据存储目录:/var/lib/mongodb
日志文件目录:/var/log/mongodb

我们在启动前可以置当前用户有读写权限:
在这里插入图片描述
由于mongodb依赖openssl 11.1版本需要编译安装指定版本
在这里插入图片描述
设置openssl11环境变量
在这里插入图片描述
在这里插入图片描述
接下来启动mongodb服务
在这里插入图片描述

三.MongoDB Shell

MongoDBShell是MongoDB提供的官方交互式界面,允许用户与MongoDB数据库进行
交互、执行命令和操作数据库。
MongoDB Shell是基于JavaScript的,允许用户直接在命令行或者脚本中使用Java
Script语言来操作MongoDB数据库。

1.安装MongoDB Shell

解压安装包,将bin目录中mongosh二进制文件复制到PATH变量中列出的目录中,qqqqqq
例如/usr/local/bin:

在这里插入图片描述

2.验证mongodb shell

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

说明:
mongosh:启动MongoDB Shell命令行工具。
—-host:指定MongoDB服务器的主机名或IP地址。
:MongoDB服务器的主机名(如1ocalhost)或IP地址(如127.0.0.1)。
—-port:指定MongoDB服务器的端口号。
:MongoDB服务器监听的端口号,默认端口是27017。
在这里插入图片描述

四.数据库管理

1.查看数据库列表

要查看当前MongoDB实例中所有数据库的列表,可以使用showdbs命令:在这里插入图片描述
查看当前数据库是db命令
在这里插入图片描述

2.创建数据库

在MongoDB中,数据库的创建是一个简单的过程,当你首次向MongoDB中插入数据时,
如果数据库不存在,MongoDB会自动创建它。
一我们只需选择一个数据库名称,并开始向其中插入文档即可。
当你使用use命令来指定一个数据库时,如果该数据库不存在,MongoDB将自动创建它。
MongoDB创建数据库的语法格式如下:

在这里插入图片描述
如果数据库不存在,则创建数据库,否则切换到指定数据库。
可以看到,我们刚创建的数据库runoob并不在数据库的列表中,要显示它,我们需要
向runoob数据库插入一些数据。

在这里插入图片描述

3.删除数据库

如果你需要删除数据库,可以使用db.dropDatabase(方法:
在这里插入图片描述
上述命令将删除当前正在使用的myDatabase数据库及其所有集合。

4.默认数据库

MongoDB中默认的数据库为test,如果你没有创建新的数据库,数据将存放在test
数据库中。
当您通过shell连接到MongoDB实例时,如果未使用use命令切换到其他数据库,
则会默认使用test数据库。
例如,在启动MongoDB实例并连接到MongoDBshell后,如果您开始插入文档而未显
式指定数据库,MongoDB将默认使用test数据库。

5.系统内置数据库

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

admin数据库:存储所有数据库的用户身份信息和全局权限(如一root用户)。用
户必须通过admin数据库认证后才能执行跨库管理操作。
config数据库:仅在分片集群环境中存在。存储分片信息、块(chunk)分布、集合
分片策略等关键元数据。
local数据库:存储当前节点的副本集状态、操作日志(oplog)等本地数据。数据不
会被复制到其他节点,仅存在于当前实例

五.集合管理

1.查看集合

查看当前库已有集合,可以使用showcollections或show tables命令
在这里插入图片描述

2.创建集合

MongoDB中使用createCollectionO方法来创建集合。

  • name:要创建的集合名称。
  • options:可选参数,指定有关内存大小及索引的选项。
    以下是更清晰排版、优化表述的 Markdown 版本(保留原内容逻辑,仅优化格式与可读性 ):
参数名 类型 描述 示例值
capped 布尔值 是否创建一个固定大小的集合。 true
size 数值 集合的最大大小(以字节为单位)。仅在 cappedtrue 时有效。 10485760(10MB)
max 数值 集合中允许的最大文档数。仅在 cappedtrue 时有效。 5000
validator 对象 用于文档验证的表达式。 { $jsonSchema: { … }}
validationLevel 字符串 指定文档验证的严格程度:
- off:不进行验证
- strict:插入和更新操作都必须通过验证(默认)
- moderate:仅现有文档更新时需通过验证,插入新文档无需
“strict”
validationAction 字符串 指定文档验证失败时的操作:
- error:阻止插入或更新(默认)
- warn:允许插入或更新,但会发出警告
“error”
storageEngine 对象 为集合指定存储引擎配置。 { wiredTiger: { … }}
collation 对象 指定集合的默认排序规则。 { locale: “en”, strength: 2 }

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

3.更新集合名

在MongoDB中,不能直接通过命令来重命名集合。
MongoDB可以使用renameCollection方法来来重命名集合。

renameCollection 命令的语法:

db. adminCommand (
renameCollection: "sourceDb. sourceCollection”,
to:"targetDb. targetCollection”,
dropTarget:
})

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

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

在这里插入图片描述
在这里插入图片描述

4.删除集合

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

语法格式:

db.collection名称.drop()
如果成功删除选定集合,则dropO方法返回true,否则返回false。

在这里插入图片描述

六.文档操作

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

1.插入文档

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

常用的插入文档方法

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

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

1.insertOne()

insertOne(方法用于在集合中插入单个文档
db.collection 名称. insertOne(document, options)

  • document:要插入的单个文档。
  • options(可选》:一个可选参数对象,可以包含writeConcern和bypassDocumen
    tValidation等。
    在这里插入图片描述

2.insertMany()

insertMany0方法用于在集合中插入多个文档。
db. collection. insertMany(documents, options)

  • documents:要插入的文档数组。
  • options(可选):一个可选参数对象,可以包含ordered、writeConcern和 bypassDo
    cumentValidation 等。
    在这里插入图片描述

2.查询文档

MongoDB查询文档使用findO、findOneO方法

2.1 find()方法

fin()方法以非结构化的方式来显示所有文档。
在这里插入图片描述
在这里插入图片描述
按条件查找文档
在这里插入图片描述
说明:
(name: 1,age: 1, _id: 0}- 投影(Projection)
用于控制返回的字段(类似SQL中的SELECT语句):1表示包含该字段,0表
示排除该字段。1表示包含该字段,0表示排除该字段。例如_id:0表示排除默
认返回的_id字段。所以最终返回的文档仅包含name和age字段。

如果你需要以易读的方式来读取数据,可以使用pretty方法,语法格式如下:
db. myCollection. find O. pretty O
prettyO方法以格式化的方式来显示所有文档。
在这里插入图片描述

2.2findOne()方法

findOne0方法用于查找集合中的单个文档。如果找到多个匹配的文档,它只返回第一个。
在这里插入图片描述

3.删除文档

常用的删除文档方法包括deleteOne()、deleteMan()以及findOneAndDelete()。-

3.1 deleteOne()

deleteOne(方法用于删除匹配过滤器的单个文档。
在这里插入图片描述

3.2deleteMany()

在这里插入图片描述

3.3 findOneAndDelete()

在这里插入图片描述

4.更新文档

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

4.1updateOne()

updateOne(方法用于更新匹配过滤器的单个文档。在这里插入图片描述

4.2updateMany

updateManyO方法用于更新所有匹配过滤器的文档。
语法:
db.collection. updateMany(filter, update, options)
·filter:用于查找文档的查询条件。
· update:指定更新操作的文档或更新操作符。
·options:可选参数对象,如upsert、arrayFilters 等。

在这里插入图片描述

4.3replaceOne()

replaceOne0方法用于替换匹配过滤器的单个文档,新的文档将完全替换旧的文档。
语法:
db.collection. replaceOne(filter, replacement, options)
·filter:用于查找文档的查询条件。
·replacement:新的文档,将替换旧的文档。
· options:可选参数对象,如 upsert 等。

在这里插入图片描述

4.4 findOneAndUpdate()

findOneAndUpdateO方法用于查找并更新单个文档,可以选择返回更新前或更新后的文档。
语法:
db.collection. findOneAndUpdate(filter, update, options)
·filter:用于查找文档的查询条件。
·update:指定更新操作的文档或更新操作符。
· options:可选参数对象,如projection、sort、upsert、returnDocument
主等。

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

1.安装备份与恢复命令

在这里插入图片描述

2.Mongodb数据备份

-h:MongoDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.
1:27017
-d:需要备份的数据库实例,例如:test
-o:备份的数据存放位置,例如:/data/dump,当然该目录需要提前建立,在备份完成
后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数
据。
在这里插入图片描述
删除数据库在恢复
在这里插入图片描述
恢复数据库
在这里插入图片描述
在这里插入图片描述

八.Mongodb用户管理


网站公告

今日签到

点亮在社区的每一天
去签到