当前位置: 首页 > news >正文

什么是MongoDB

目录

主要特点

MongoDB概念解析

完整术语列表

MongoDB安装

MongoDB Shell

安装MongoDB Shell

数据库管理

查看数据库列表

创建数据库

删除数据库

默认数据库

系统内置数据库

集合管理

查看集合

创建集合

更新集合名

删除集合

文档操作

插入文档

查询文档

删除文档

更新文档

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

安装备份与恢复命令

MongoDB数据备份

MongoDB数据库恢复

MongoDB用户管理


主要特点

文档导向的存储: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. ru或mapreduce命令在MongoDB中执行。
nCommandGridFS大文件存储:GridFS是MongoDB内置的功能,用于存储和检索大于BSON文档大小限制的文件,如图片和视频。
服务端脚本执行:MongoDB允许在服务端执行JavaScript脚本不,提供了直接在服务端
执行或存储函数定义以供后续调用的能力。
多语言支持:MongoDB提供了对多种编程语言的支持,包括但不限于RUBY、PYTHON、JAVA、C++、PHP和C#。

MongoDB概念解析

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

完整术语列表

文档(Document):MongoDB的基本数据单元,通常是一个JSSON-1ike的结构,可以包含
多种数据类型。集合(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开始支持,允许一组操作作为一个原子单元执行。操作符(0perators):用于查询和更新文档的特殊字段。
连接(Join):MongoDB 允许在查询中使用$1ookup操作符来实现类似SQL的连接操作。
TTL(Time-To-Live):可以为集合中的某些字段设置 TTL,!以自动删除旧数据。
存储引擎(Storage Engine):MongoDB用于数据存储和管理的底层技术,如WiredTiger
和MongoDB的旧存储引擎MMAPv1。MongoDB Compass:MongoDB的图形界面工具,用于可视化和管理MongoDB数据。MongoDBAtlas:MongoDB提供的云服务,允许在云中托管MoongoDB数据库。

MongoDB安装

安装前我们需要安装各个Linux平台依赖包。解压安装包将解压包拷贝到指定目录MongoDB的可执行文件位于bin目录下,所以可以将其添加到PATH路径中:

dnf -y install libcurl openssl 
tar zxvf mongodb-linux-x86_64-rhel8-8.0.8.tgz
mv mongodb-linux-x86_64-rhel88-8.0.8 /usr/local/mongodb
echo
echo 'export PATH=/usr/local/mongodb/bin:$PATH' >>/etc/profile source /etc/profile

 我们在启动前可以先创建这两个目录并设置当前用户有读写权限:由于 mongodb 依赖openssl11,需要编译安装openssl11设置 openssl11的环境变量接下来启动 Mongodb 服务:看到以下信息,说明启动成功。

[root@localhost ~]#mkdir-p /var/lib/mongo
[root@localhost ~]#mkdir -p /var/log/mongodb
[root@localhost ~]#chownwhoami`/var/lib/mongo
[root@localhost ~]#chownwhoami /var/log/mongodb
[root@localhost ^]# dnf install -y gcc make perl
[root@localhost `]# tar xzf openssl-1.1.1w.tar.gz
[root@localhost ^]# cd openssl-1.1. l lw
[rootesentinel01 openss1-1.1.1w]#./config --prefix=/opt/openss111 --openssldir=
/opt/openss111/ssl
[root@sentinel01openssl-1.1.1.1w]#make -j$(nproc)
[root@sentinel01 openssl-1.1.1w]#make install
[root@localhost *]# echo 'export_D_LIBRARYPATH=/opt/openss111/lib:$LD_LIBRARY
PATH' | sudo tee /etc/profile.d/openssl11.sh
[root@localhost ~]# source /etc/profile.d/opensslll.sh
[root@localhost ~]#mongod --dbpath /var/lib/mongo --logpath/var/log/mongodb/m
ongod. log --fork

MongoDB Shell

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

安装MongoDB Shell

[root@localhost ^]# tar xzf mongosh-2.5.0-linux-x64-openss13tg2
[root@localhost ^]# cd mongosh-2.5.0-linux-x64-openss13
[root@localhost mongosh-2.5.0-linux-x64-openss13]# cd bin/
[root@localhost bin]# cp mongosh /usr/local/bin/
[root@localhost bin]# cp mongosh_crypt_vl.so /usr/loca/1ib/

                 验证MongoDB Shell 


mongosh -- host <hostname> ----port <port>
root@sentinel01 bin]# mongosh

数据库管理

查看数据库列表

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

创建数据库

在MongoDB中,数据库的创建是一个简单的过程,当你首次向MongoDB中插入数据时,
如果数据库不存在,MongoDB会自动创建它。
我们只需选择一个数据库名称,并开始向其中插入文档即可。

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


use DATABASE_NAME
test> use runoob
switched to db runoob
runoob> db
runoob
runoob>

 

runoob>
show dbs
admin
40.00KiB
config
60.00KiB
local
40.00 KiB
runoob

 

runoob> db.runoob.insert0ne({"name":"zhangsan"})
acknowledged: true,
insertedId: ObjectId('680al8f4277aalc07blb2700'
runoob>
show dbs.
admin
40.00KiB
config
60.00KiB
local
40.00KiB
runoob
40.00KiB
runoob>

删除数据库

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

use myDatabase
db.dropDatabase ()

 

runoob> show dbs
admin
40.00KiB
config
60.00KiB
local
40.00KiB
runoob 40.00 KiB
runoob> use runoob
already on db runoob
test> db.dropDatabase()
{ ok: 1, dropped: 'runoob
runoob> show dbs
admin
40.00KiB
config
60.00KiB
local
40.00KiB

默认数据库

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

系统内置数据库

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

集合管理

查看集合

> show collections

创建集合

语法格式:
db.createCollection (name, options)
参数说明:
name:要创建的集合名称。
options:可选参数,指定有关内存大小及索引的选项。

参数名类型描述示例值
capped布尔值是否创建一个固定大小的集合。true
size数值集合的最大大小(以字节为单位)。仅在d 为true 时有效。
:cappe
10485760
(10MB)
max数值集合中允许的最大文档数。仅在capped 为tru 5000e 时有效。5000
validator对象用于文档验证的表达式。

{$jsonSchema:

{ ... }}

validationLevel字符串指定文档验证的严格程度。
"off":不进行验证。
"strict":插入和更新操作都必须通过验证(默认)。
"moderate":仅现有文档更新时必须通过验证,插
入新文档时不需要。
"strict"
validationAction字符串指定文档验证失败时的操作。
"error":阻止插入或更新(默认)。
warn":允许插入或更新,但会发出警告。
"error"
storageEngine对象为集合指定存储引擎配置。

{ wiredTiger:

{ ... }}

参数名类型描述示例值
collation对象指定集合的默认排序规则

{ locale: "en"

strength: 2 }

 

 

db.createCollection ("myComplexCollection",
capped: true,
size: 10485760,
max: 5000,
validator:{$jsonSchema: {
bsonType:"object",
required: ["name", "email"],
properties:{
name:
bsonType:
string",
description:"必须为字符串且为必填项"
email: {
bsonType: "string",
pattern:
description:"必须为有效的电子邮件地址"
}},
validationLevel:"strict",
validationAction:"error",
storageEngine: {
wiredTiger:{configString: "block_compressor=zstd
},
collation:{locale:"en", strength:2}
});

更新集合名

renameCollection命令的语法:
db.adminCommand({
renameCollection: "sourceDb. sourceCollection",
to: "targetDb.targetCollection
dropTarget: <boolean>

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

1.确保已连接到 test数据库
use test
2.运行renameCollection命
db.adminCommand({
renameCollection: "test.oldCollection",
to:"test.newCollection" });
如果你要将集合重命名到另一个数据库,例如将test数据库中的oldCollection重命名
为production数据库中的newCollection,可以这样做:
db.adminCommand({
renameCollection: "test.oldCollection",
to:"production. newCollection" });

删除集合

>use mydb
switched to db
>db.createCollection("kgc")
{ok:1}
mydb>show collections
kgc
>db.kgc.drop()
true

文档操作

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

 

db.myCollection. insertOne({
"Alice",
name
25,
age:
city: "New York"

插入文档

查询文档

db.myCollection.find();
db.myCollection.find(
$gt: 25 } },
age:
age: 1, id: 0 }
name:

删除文档

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

db.myCollection.findOneAndDelete(
name:
"Charlie"
projection:
1.
name:
age:

更新文档

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

插入测试数据

db. myCollection. insertMany([{ name: "Alice", age: 25,city: "LosAngeles", statu
"inactive" },{name: "Bob",age: 30,city: "Los Angeles",status:
"active"
S:
"Charlie", age: 35, city: "Chicago", status:
"active"}]);
name:

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

mongodump 用于创建 MongoDB 数据的二进制备份,支持全量备份或指定库 / 集合的增量备份

# 全量备份(默认连接 localhost:27017)
mongodump --out /path/to/backup/directory# 指定主机和端口
mongodump --host example.com --port 27017 --out /backup/dir# 指定认证信息(用户名和密码)
mongodump --username admin --password yourpassword --authenticationDatabase admin --out /backup/dir# 备份单个数据库
mongodump --db mydatabase --out /backup/dir# 备份单个集合
mongodump --db mydatabase --collection mycollection --out /backup/dir# 压缩输出(4.2+ 版本支持)
mongodump --gzip --out /backup/dir

 

恢复数据库 (mongorestore)

mongorestore 用于从 mongodump 创建的备份中恢复数据

# 从备份目录恢复(默认恢复到 localhost:27017)
mongorestore /path/to/backup/directory# 指定目标主机和端口
mongorestore --host example.com --port 27017 /backup/dir# 指定认证信息
mongorestore --username admin --password yourpassword --authenticationDatabase admin /backup/dir# 恢复到指定数据库(可重命名目标库)
mongorestore --db targetdb /backup/dir/sourcedb# 恢复单个集合
mongorestore --db targetdb --collection mycollection /backup/dir/sourcedb/mycollection.bson# 恢复时不删除现有数据(追加模式)
mongorestore --drop  # 恢复前删除同名集合(默认行为)
mongorestore --noDrop  # 保留现有数据,追加新文档# 从压缩备份恢复
mongorestore --gzip /backup/dir

安装备份与恢复命令

使用 Homebrew(推荐)

# 安装 MongoDB Database Tools
brew tap mongodb/brew
brew install mongodb-database-tools
手动下载二进制包

从 MongoDB 官网 下载适合 macOS 的 .tgz 包解压并移动到系统路径

tar -zxvf mongodb-database-tools-macos-x86_64-<version>.tgz
sudo cp mongodb-database-tools-macos-x86_64-<version>/bin/* /usr/local/bin/

 Ubuntu/Debian

# 添加 MongoDB 官方仓库
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt-get update# 安装 Database Tools
sudo apt-get install -y mongodb-database-tools

CentOS/RHEL

 

# 添加 MongoDB 官方仓库
echo "[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc" | sudo tee /etc/yum.repos.d/mongodb-org-6.0.repo# 安装 Database Tools
sudo yum install -y mongodb-database-tools

MongoDB数据备份

# 全量备份(默认 localhost:27017)
mongodump --out /data/backup/$(date +%Y%m%d)# 指定认证信息和压缩
mongodump --username admin --password 'pass' \--authenticationDatabase admin \--gzip --out /data/backup/$(date +%Y%m%d)

 

# 1. 冻结写入(临时阻塞写操作)
use admin
db.fsyncLock()# 2. 创建文件系统快照(如 LVM、云磁盘快照)
lvcreate -L 10G -s -n mongodb_snap /dev/mapper/vg_mongodb-lv_data# 3. 解除冻结
db.fsyncUnlock()
# 首次全量备份(含 oplog)
mongodump --oplog --out /data/backup/full_$(date +%Y%m%d)# 后续增量备份(从上次 oplog 时间点开始)
LATEST_OPLOG_TIME=$(cat /data/backup/full_*/oplog.bson | bsondump | tail -n 1 | jq -r '.ts.$timestamp.t')
mongodump --oplogReplay --oplogLimit "{'ts': {'\$gt': Timestamp($LATEST_OPLOG_TIME, 1)}}" --out /data/backup/incremental_$(date +%Y%m%d)

MongoDB数据库恢复

使用 mongorestore 恢复逻辑备份

从 mongodump 创建的备份中恢复数据

# 恢复全部数据库(默认覆盖同名集合)
mongorestore /path/to/backup/directory# 指定目标数据库(可重命名)
mongorestore --db newdb /path/to/backup/olddb# 恢复单个集合
mongorestore --db targetdb --collection users /path/to/backup/sourcedb/users.bson# 恢复时保留现有数据(追加模式)
mongorestore --noDrop /path/to/backup

MongoDB用户管理

创建管理员用户(首次配置)

启动 MongoDB 服务(未启用认证)

mongod --dbpath /data/db

连接 MongoDB 并创建管理员用户:

use admin
db.createUser({user: "admin",pwd: passwordPrompt(), // 交互式输入密码roles: [ { role: "root", db: "admin" } ]
})
db.auth("admin", passwordPrompt()) // 返回 1 表示认证成功

用户管理操作

 创建普通用户
use mydb  // 切换到目标数据库
db.createUser({user: "appuser",pwd: passwordPrompt(),roles: [{ role: "readWrite", db: "mydb" },  // 读写权限{ role: "read", db: "otherdb" }     // 只读权限]
})

http://www.xdnf.cn/news/961507.html

相关文章:

  • freeCAD 学习 step1
  • 【FFmpeg学习(2)】视频概念
  • 雨季智慧交通:从车辆盲区到客流统计的算法全覆盖
  • ubuntu + nginx 1.26 + php7.4 + mysql8.0 调优
  • Cypher 查询语言完全指南(2024最新版)—— Neo4j 图数据库实战教程
  • Unity | AmplifyShaderEditor插件基础(第八集:噪声波动shader)
  • QT中实现tcp连接
  • MongoDB数据库应用
  • AO810 AO810V2 - ABB Ability系统800xA硬件
  • 校园导航系统核心技术解析:高精度定位与 AR 实景导航的应用实践
  • 【动作】AVA:时空定位原子视觉动作视频数据集
  • 【Dv3Admin】系统视图角色菜单按钮权限API文件解析
  • Doris “_stream_load“ 方式批量导入数据
  • Remmina远程访问如何开启本地音频?
  • (41)课60--61高级篇: MySQL体系结构(连接层、服务层、引擎层、存储层)。存储引擎是基于表的,可为不同表指定不同的存储引擎;查询表结构语句 show create table 表名
  • #Word“嵌入式”插图显示不全的解决教程
  • 在Word中使用 Microsoft Print to PDF和另存为PDF两种方式生成的 PDF文件
  • ubuntu24安装TensorRT
  • ubuntu24.04安装IDEA2025.1.2搭建java开发环境
  • 数据结构-链表OJ-回文链表,如何将时间复杂度控制为O(N),空间复杂度控制为O(1)?
  • POI设置Excel单元格背景色
  • DataFrame中.iloc 属性
  • HTAP 技术:融合事务与分析的数据处理新范式
  • 【数据篇】持久化核心:整合 JPA/MyBatis 实现优雅的数据库操作
  • pcie问答--0609
  • 激光隐形切割(Stealth Dicing)技术
  • Oracle数据库对IPv6的支持情况
  • 造成服务器重启的原因都有哪些?
  • Lang*生态系统多个专业框架及他们的作用
  • FTXUI::Dom 模块