mongledb数据库应用
目录
一什么是MONGODB
1.主要特点
2.MONGODB概念解析
3.完整术语列表
二.MONGOdb安装
三.mongodb shell
1.安装mongodb shell
2.验证mongodb shell
四.数据库管理
1.查看数据库列表
2.创建数据库
3.删除数据库
4.默认数据库
5.系统内置数据库
五.集合管理
1.查看集合
2.创建集合
3.更新集合名
1. 确保已连接到 test 数据库
2.运行renamecollection命令
4.删除集合
六.文档操作
1.插入文档
1.insertOne()
2.insertMany ()insertMany()方法用于在集合中插入多个文档。db.collection. insertMany (documents, options)·documents:要插入的文档数组。·options(可选):一个可选参数对象,可以包含 ordered、writeConcern 和 bypassDocumentValidation 等。
2.查询文档
2.2findOne()
3.删除文档
3.1 deleteOne()
3.2 deleteMany
3.3 findOneAndDelete()
4.更新文档
4.1updataeOne()
4.2updateMany()
4.3replaceOne()
4.4findOneandupdate()
七. mongodb备份与恢复
1.安装备份与恢复命令
2.mongodb数据备份
3.mongodb数据恢复
八mongodb用户管理
1.连接到mongodb
2.切换到目标数据库
3.创建用户
4.验证用户
5.启用身份验证
6. 使用用户身份登录
7. 删除用户
使用 db.dropUser 命令删除指定用户。例如,删除名为 testuser 的用户:db. dropUser ("testuser")
一.什么是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 格式的查询语法,支持复杂的查询表达式,包括
对内嵌对象和数组的查询。>数据更新:利用 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、J
AVA、C++、PHP 和 C#。
2.MONGODB概念解析
不管我们学习什么数据库都应该学习其中的基础概念,在MongoDB 中基本的概念是文档、集合、数据库,下面我们挨个介绍。
下表将帮助您更容易理解 MongoDB 中的一些概念:
sql术语/概念 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 文档大小限制的文件的规范。 ObjectId:MongoDB 为每个文档自动生成的唯一标识符 CRUD 操作:创建(Create)、读取(Read)、更新(Update)、删除(Delete)操作 事务(Transactions):从MongoDB 4.0 开始支持,允许一组操作作为一个原子单元执行。 操作符(Operators):用于查询和更新文档的特殊字段。 连接(Join):MongoDB 允许在查询中使用 $1ookup 操作符来实现类似 SQL的连接操作 TTL(Time-To-Live):可以为集合中的某些字段设置 TTL,以自动删除旧数据 存储引擎(Storage Engine):MongoDB 用于数据存储和管理的底层技术,如 WiredTiger
和 MongoDB 的旧存储引擎 MMAPv1。。
MongoDB Compass:MongoDB 的图形界面工具,用于可视化和管理 MongoDB 数据。
MongoDB Atlas:MongoDB 提供的云服务,允许在云中托管 MongoDB 数据库。
二.MONGOdb安装
MongoDB 的安装过程简单直观,便于用户快速部署和使用。MongoDB 提供了 linux 各个发行版本 64位的安装包,你可以在官网下载安装包。
安装前我们需要安装各个Linux 平台依赖包。
mongodb-database-tools-rhel70-x86_64-100.12.0.rpmmongodb-linux-x86_64-rhel8-8.0.8.tgzmongosh-2.5.0-linux-x64-openssl3.tgzopenssl-1.1.1w.tar.gz
安装openssl包
dnf -y install openssl
解压安装包
tar zxf mongodb-linux-86_64-rhel8-8.0.8
将解压包拷贝到指定目录
mv mongodb-linux-x86_64-rhel88-8.0.8 /usr/local/mongodb
cd到mongodb目录下 vim添加 在启动
cd /usr/local/mongodb/lsvim /etc/profileexport PATH=/usr/local/mongodb/bin:$PATHsource /etc/profile.d
再重启后创建两个目录
mkdir -p /var/lib/mongodbmkdir -p /var/lib/mongomkdir -p /var/log/mongodb
由于mongodb依赖openssl11,需要安装openssl11 进行解压 进入cdopenssl目录下查看ls,在./config 在编译安装make
dnf -y install gcc perltar zxf openssl-1.1.1w.tar.gzcd opensslls./config-predix=/opt/openssl11 --openssldir=/opt/openssl11/sslmake -j2make install
设置openssl11的环境变量 在重启
cd opt/cd openssl/lsexport LD_LIBRARY_PATH=/opt/openssl11/lib:$LD_LIBRARY_PATHsourcce /etc/profile
重启mongodb服务
mongod --dbpath /var/lib/mongo --logpth /var/lib/mongo/mongod.log --fork
三.mongodb shell
MongoDB Shell 是 MongoDB提供的官方交互式界面,允许用户与MongoDB 数据库进行
交互、执行命令和操作数据库。
MongoDB Shell 是基于 JavaScript 的,允许用户直接在命令行或者脚本中使用 JavaScript 语言来操作 MongoDB 数据库。
1.安装mongodb shell
解压安装包,将bin目录中mongodb二进制文件复制到PATH变量中列出的目录中,例如
mongosh-2.5.0-linux-x64-openssl3.tgzcd mongosh-2.5.0-linux-x64-openssl3cd bin/cp mongosh /usr/local/bin/cp mongosh_crypt_vl.so /usr/local/bin/
2.验证mongodb shell
打开你的终端并使用 mongosh 命令连接到MongoDB 服务器:mongosh -- host <hostname> -- port <port>
说明:
·mongosh:启动 MongoDB Shell 命令行工具。 ·-- host<hostname>:指定 MongoDB 服务器的主机名或 IP地址。 ·< hostname>:MongoDB 服务器的主机名(如 localhost)或 IP地址(如 127.0.0.1) ·-- port<port>:指定 MongoDB 服务器的端口号。 ·< port>:MongoDB 服务器监听的端口号,默认端口是 27017。
输入mongosh默认连接本地mongodb数据库,看到以下信息说明登录成功,warnings警告为优化提醒,可以暂时忽略,如若生产环境部署需要处理
mongoshCurrent Mongosh Log ID: 680a1533277aalc07b1b26ffmongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.5.0
8.0.82.5.0For mongosh info see: https://www.mongodb.com/docs/mongodb-shell/Connecting to:Using MongoDB:Using Mongosh:The server generated these startup warnings when booting2025-04-24T18:22:54. 368+08:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem2025-04-24T18:22:55.892+08:00: Access
四.数据库管理
1.查看数据库列表
要查看当前mongodb实例中所有数据库的列表,可以使用show dbs命令
>show dbs
查看当前正在使用的数据库,可以使用db命令
>db
2.创建数据库
在MongoDB中,数据库的创建是一个简单的过程,当你首次向MongoDB中插入数据时,如果数据库不存在,MongoDB会自动创建它。
我们只需选择一个数据库名称,并开始向其中插入文档即可。
当你使用use命令来指定一个数据库时,如果该数据库不存在,MongoDB将自动创建它。MongoDB 创建数据库的语法格式如下:
use DATABASE_NAME
如果数据库不存在,则创建数据库,否则切换到指定数据库。
实例:
以下实例我们创建了数据库 张三
test>use zhangsan
switched to db runoobzhangsan> db
执行use runoob 命令后,MongoDB 将创建名为runoob 的新数据库。此时,你可以开始在这个数据库中创建集合和插入文档。
如果你想查看所有数据库,可以使用 show dbs 命令:
zhangsan> show dbsadmin 40.00 dbs
config 60.00 kib
local 40.00 kib
可以看到,我们刚创建的数据库 runoob 并不在数据库的列表中,要显示它,我们需要向张三数据库插入一些数据。
zhangsan> db.runoob. insertOne ({"name":"zhangsan"})acknowledged: true,insertedId: ObjectId('680a18f4277aalc07b1b2700')zhangsan> show dbs
3.删除数据库
如果你需要删除数据库,可以使用db.dropDatabase()方法:
use myDatabasedb.dropdatabase()
上述命令将删除当前正在使用mydatabase数据库及其所有集合
实例】
>show dbsadmin 40.00 kib
config 60.00 kib
local 40.00 kibuse runoobalready on db runoobtest>dn.dropdatabase(){ ok: 1,dropped:'runoob' }runoob> show dbsadmin 40.00 kib
config 60.00 kib
local 40.00 kib
4.默认数据库
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,数据将存放在 test数据库中。
当您通过 shell 连接到 MongoDB 实例时,如果未使用use 命令切换到其他数据库,则会默认使用 test 数据库。
例如,在启动 MongoDB 实例并连接到 MongoDB shell 后,如果您开始插入文档而未显式指定数据库,MongoDB 将默认使用 test 数据库。
5.系统内置数据库
在 MongoDB 中,admin、config 和 local 是三个特殊的系统内置数据
admin 数据库:存储所有数据库的用户身份信息和全局权限(root用户)用户必须通过admin 数据库认证后才能执行跨库管理操作。 config数据库:仅在分片集群环境中存在。存储分片信息、块(chunk)分布、集合
分片策略等关键元数据。local数据库:存储当前节点的副本集状态、操作日志(oplog)等本地数据。数据不
会被复制到其他节点,仅存在于当前实例。
五.集合管理
1.查看集合
查看当前库已有集合,可以使用show collections或show tables命令
> show collections
2.创建集合
MongoDB 中使用 createCollection() 方法来创建集合。
语法格式:
db. createCollection (name, options)
参数说明:
·name:要创建的集合名称。
·options:可选参数,指定有关内存大小及索引的选项。
参数名 类型 描述 示例值 capped 布尔值 是否创建一个固定大小的集合 true size 数值 集合的最大大小(以字节为单位)。仅在
capped 为 true 时有效。10485760 (10mb) max 数值 集合中允许的最大文档数。仅在 capped 为 true 时有效。
5000 validator 对象 用于文档验证的表达式 {$jsonSxhema;
{...}}
validationlevel 字符串 指定文档验证的严格程度。
"off":不进行验证。
"strict":插入和更新操作都必须通过验证(默认)。
“moderate":仅现有文档更新时必须通过验证,插
入新文档时不需要。”dtrict“ validationaction 字符串 指定文档验证失败时的操作。
"error":阻止插入或更新(默认)。
"warn":允许插入或更新,但会发出警告。"error" storangeengine 对象 为集合指定存储引擎配置 { wiredTiger:
{ ... }}参数名 类型 描述 示例值 collation 对象 指定集合的默认排序规则 { locale:"en",strength:2}
3.更新集合名
在 MongoDB 中,不能直接通过命令来重命名集合。
MongoDB 可以使用 renameCollection 方法来来重命名集合。
renameCollection 命令的语法:
db. adminCommand ({
renameCollection: "sourceDb. sourceCollection",
to: "targetDb. targetCollection",
dropTarget: <boolean>
})
参数说明:
·renameCollection:要重命名的集合的完全限定名称(包括数据库名)。 ·to:目标集合的完全限定名称(包括数据库名)。 ·dropTarget(可选):布尔值。如果目标集合已经存在,是否删除目标集合。默认值为f
alse.
实例
假设你要将 test 数据库中的 oldCollection 重命名为 newCollection,可以按以下步骤进行:
1. 确保已连接到 test 数据库
use test
2.运行renamecollection命令
db.admincommand({
renamecollection:"test.odcollection",
to:"test.newcollection"});
4.删除集合
MongoDB 中使用 drop()方法来删除集合。
drop()方法可以永久地从数据库中删除指定的集合及其所有文档,这是一个不可逆的操作,
因此需要谨慎使用。
语法格式:
db.collection名称.drop()
如果成功删除选定集合,则drop()方法返回 true,否则返回 false。
实例
在数据库 mydb 中,我们可以先通过show collections命令查看已存在的集合:
use mydbswitched to db>db.createcollection("kgc")(ok: 1)mydb>show collections
kgc接着删除集合kgc:
》db.kgc.drop()
trun通过show collections再次查看数据库mydb中的集合
>show collections
通过查看kgc集合被删除
六.文档操作
1.插入文档
文档的数据结构和 JSON 基本一样。所有存储在集合中的数据都是BSON 格式。BSON是一种类似 JSON 的二进制形式的存储格式,是Binary JSON 的简称。
常用的插入文档方法包括:
方法 用途 是否弃用 insertOne() 插入单个文档 否 方法 用途 是否弃用 insertMant() 查入多个字符 否 insert() 插入单个或多个文档 是 save() 插入或更新文档 是
1.insertOne()
insertOne()方法用于在集合中插入单个文档。
db. collection名称.insertOne(document,options)
· document:要插入的单个文档。
·options(可选):一个可选参数对象,可以包含 writeConcern 和 bypassDocumen
tValidation 等。
实例
db.mycllection.insertOne({name: "alice",age:25,city: "new york"});
2.insertMany ()
insertMany()方法用于在集合中插入多个文档。
db.collection. insertMany (documents, options)
·documents:要插入的文档数组。
·options(可选):一个可选参数对象,可以包含 ordered、writeConcern 和 bypassDo
cumentValidation 等。
实例
db. myCollection. insertMany ([{ name: "Bob", age: 30, city: "Los Angeles" },{ name:"cherlie",age:35,city:"chicago"}]);
2.查询文档
MongoDB 查询文档使用 find()、findOne() 方法。
find()方法以非结构化的方式来显示所有文档。
MongoDB 查询数据的语法格式如下:
db. collection. find (query, projection)
·query:用于查找文档的查询条件。默认为 ,即匹配所有文档。
·projection(可选):指定返回结果中包含或排除的字段。
查找所有文档:
实例
db.myCollection.find();
按条件查找文档:
实例
db. myCollection. find({ age: { $gt: 25 } }) ;
说明:
$gt 是MongoDB的比较操作符,表示 “大于”(Greater Than)
这个条件的作用是筛选出age字段值大于25的文档。类似的其他比较操作符:
$1t(小于)、$gte(大于等于)、$1te(小于等于)
$eq(等于)、$ne(不等于)
按条件查找文档,并只返回指定字段:
实例
db. myCollection. find({ age: { $gt: 25 } },{ name:1, age:1,-id:0}
);
说明:
{name: 1, age: 1,_id:0} -投影(Projection)
用于控制返回的字段(类似SQL中的SELECT语句):1 表示包含该字段,0 表示排除该字段。1 表示包含该字段,0 表示排除该字段。例如_id:0 表示排除默认返回的 _id 字段。所以最终返回的文档仅包含name和age字段。
如果你需要以易读的方式来读取数据,可以使用pretty()方法,语法格式如下:
>db.myCollection.find().pretty()
pretty()方法以格式化的方式来显示所有文档。
2.2findOne()
findOne() 方法用于查找集合中的单个文档。如果找到多个匹配的文档,它只返回第一个。
语法:
db. collection. findOne (query, projection)
·query:用于查找文档的查询条件。默认为 (},即匹配所有文档。
·projection(可选):指定返回结果中包含或排除的字段。
查找单个文档:
db. myCollection. findOne ({ name:
查找单个文档,并只返回指定字段:
db. myCollection. findOne (
{ name: "Alice" },
{ name: 1, age: 1, _id: 0});
3.删除文档
3.1 deleteOne()
deleteOne()方法用于删除匹配过滤器的单个文档。
语法:
db.collection. deleteOne (filter, options)
·filter:用于查找要删除的文档的查询条件。
·options(可选):一个可选参数对象实例
db. myCollection. deleteOne({ name: "Alice" });
返回结果:
{"acknowledged": true,
"deletedCount": 1}
3.2 deleteMany
语法:
db. collection. deleteMany(filter, options)
·filter:用于查找要删除的文档的查询条件。
·options(可选):一个可选参数对象。
实例
db. myCollection. deleteMany ({ name:"Bob" });
返回结果
{
"acknowledged": true,
"deletedCount": 1}
3.3 findOneAndDelete()
findOneAndDelete()方法用于查找并删除单个文档,并可以选择返回删除的文档。
语法:
db.collection. findOneAndDelete(filter, options)
·filter:用于查找要删除的文档的查询条件。
·options:可选参数对象,如 projection、sort 等
实例:
db。mycollection.findOneandbelete(
{ name: "charlie" },
{ projection: { name:1,age:1} }
);
4.更新文档
4.1updataeOne()
语法:
db. collection. updateOne (filter, update, options)
·filter:用于查找文档的查询条件。
·update:指定更新操作的文档或更新操作符。
·options:可选参数对象,如 upsert、arrayFilters
4.2updateMany()
语法:
db. collection. updateMany (filter, update, options)
·filter:用于查找文档的查询条件。
·update:指定更新操作的文档或更新操作符。
·options:可选参数对象,如 upsert、arrayFilters
4.3replaceOne()
语法:
db.collection. replaceOne(filter, replacement, options)
·filter:用于查找文档的查询条件。
·replacement:新的文档,将替换旧的文档。
·options:可选参数对象,如 upsert 等。
4.4findOneandupdate()
语法:
db.collection. findOneAndUpdate(filter, update, options)
·filter:用于查找文档的查询条件。
·update:指定更新操作的文档或更新操作符。
·options:可选参数对象,如 projection、sort、upsert、returnDocument等。
七. mongodb备份与恢复
1.安装备份与恢复命令
dnf -y install mongodb-database-tools-rhel70-x86_64-100.12.0.rpm
2.mongodb数据备份
在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据
到指定目录中mongodump 命令可以通过参数指定导出的数据量级转存的服务器
mongodump命令脚本语法如下
>mongodump -h dbhost -d -o dbdirectory
.-h:MongoDB 所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.
1:27017·- d:需要备份的数据库实例,例如:test .·- 0:备份的数据存放位置,例如:/data/dump,当然该目录需要提前建立,在备份完成
后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数
据。
mongodump
执行以上命令后,客户端会连接到ip为127.0.0.1 端口号为 27017的MongoDB服务上,并备份所有数据到 命令执行所在的目录下的dump/目录中。命令输出结果如下:
mongodump2025-04-25T22:44:21.307+0800 writing admin. system. version todump/admin/system. version. bson2025-04-25T22:44:21.307+0800 done dumping admin. system.version(document)2025-04-25T22:44:21.308+0800 writing mydb.myCollection to dump/mydb/myCollec tion. bsontion. bson
mongodump命令可选参数列表如下所示:
语法 描述 实例 mongodump -- host HOST_NAME -- port PO
RT_NUMBER该命令将备份所有Mongo
DB数据mongodump -- host
runoob. com -- po
rt 27017mongodump -- dbpath DB_PATH -- out BAC mongodump -- dbpa KUP_DIRECTORY th /data/db/ -- 0
ut /data/backup/mongodump -- collection COLLECTION --
db DB_NAME该命令将备份指定数据
库的集合。mongodump -- coll
ection mycol -- d
b test
3.mongodb数据恢复
mongorestore命令脚本语法如下:
>mongorestore -h <hostname><:opt> -d dbname <path>
。-- host <: port>,-h <: port>:MongoDB所在服务器地址,默认为:localhost:27017 .-- db ,-d:需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候
的不一样,比如test2.-- drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份
后添加修改的数据都会被删除,慎用哦!·< path>:mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\du
mp\test。你不能同时指定<path>和 -- dir选项, -- dir也可以设置备份目录。·-- dir:指定备份的目录,你不能同时指定<path>和 -- dir 选项。
接下来我们执行以下命令:
mongorestore
八mongodb用户管理
1.连接到mongodb
mongosh
2.切换到目标数据库
use test
3.创建用户
使用db.createUser 命令创建用户分配角色
例如:创建名为aaa用户,密码为123456 并赋予readwrite和dbadmin角色
db. aaa ({
user: "aaa",
pwd: "password123",
roles: [
{ role: "readWrite", db: "<database_name>" },
{ role: "dbAdmin", db: "<database_name>" }
]})
4.验证用户
创建用户后,你可以使用db.auth命令验证用户身份
db.auth("aaa","password123")
5.启用身份验证
为了确保只有经过身份验证的用户才能访问 MongoDB,需要启用身份验证。
编辑 MongoDB 配置文件 mongod.conf,并在其中添加以下内容:
security:
authorization: "enabled"
然后重启 MongoDB 服务以应用更改。
或者在启动命令中添加认证参数,例如
mongod -- auth -- dbpath /var/lib/mongo -logpath /var/log/mongodb/mongod.log -f
ork