如果给公司做网站宁波靠谱营销型网站建设
目录
一、MongoDB
1. 简介
2. 主要特点
3. MongoDB 概念解析
与传统 SQL 术语对比
4. 完整术语列表
二、MongoDB 安装
三、 MongoDB Shell
四、数据库管理
五、集合管理
1. 查看集合
2. 创建集合
3. 更新集合名
4. 删除集合
六、文档操作
1. 插入文档
(1)insertOne()- 插入单条文档
(2)insertMany()- 批量插入文档
(3)save() - 保存文档
2. 查询文档
(1)find()方法- 查询多条文档
(2)findOne() 方法- 查询单条文档
3. 删除文档
(1)deleteOne() - 删除单条文档
(2)deleteMany() - 批量删除文档
(3)findOneAndDelete() - 查找并删除
4. 更新文档
(1)updateOne() - 更新单条文档
(2)updateMany() - 批量更新文档
(3)replaceOne() - 替换整篇文档
(4)findOneAndUpdate() - 查找并更新
七、MongoDB 备份与恢复
1. 安装备份与恢复命令
2. MongoDB 数据备份
3. MongoDB 数据恢复
八、MongoDB 用户管理
1. 连接数据库
2. 切换到目标数据库
3. 创建用户
4. 验证用户
5. 启用身份验证
6. 使用用户身份登录
7. 删除用户
一、MongoDB
1. 简介
MongoDB 是开源的 文档型 NoSQL 数据库,由 MongoDB Inc. 开发。
核心定位:
-
以 JSON-like 格式(BSON) 存储数据
-
无固定表结构,动态适应数据结构变化
-
专为大规模数据和高并发场景设计
适用场景:
-
实时分析
-
内容管理系统
-
物联网数据存储
-
移动应用后端
2. 主要特点
特性 | 说明 | 对比 SQL |
---|---|---|
灵活模式 | 字段可动态增减,无预定义表结构 | 需预定义列和数据类型 |
水平扩展 | 分片集群支持 PB 级数据 | 扩展依赖主从或分库分表 |
高性能读写 | 内存映射引擎 + 原生索引优化 | 受限于磁盘 I/O 和锁机制 |
聚合框架 | 管道式数据处理(类似 SQL GROUP BY 的增强版) | 功能有限 |
地理空间支持 | 内置地理坐标索引和查询 | 需扩展插件实现 |
自动故障转移 | 复制集(Replica Set)自动切换主节点 | 需额外工具(如 MHA) |
3. MongoDB 概念解析
与传统 SQL 术语对比
MongoDB | SQL | 说明 |
---|---|---|
数据库 (Database) | Database | 数据容器(同名) |
集合 (Collection) | Table | 文档的容器(类似表) |
文档 (Document) | Row | 数据存储单元(JSON 格式) |
字段 (Field) | Column | 文档中的键值对 |
嵌入文档 | JOIN 查询 | 嵌套子文档(替代关联表) |
$lookup | JOIN 操作 | 跨集合关联查询(类似 LEFT JOIN) |
4. 完整术语列表
术语 | 说明 |
---|---|
_id | 文档唯一标识符(类似主键) |
BSON | Binary JSON,MongoDB 的二进制存储格式(支持更多数据类型) |
Shard | 分片,水平拆分数据的物理单元 |
Chunk | 分片内的数据块(默认 64MB),用于自动均衡分布 |
Replica Set | 复制集(1主 + N从),保障高可用 |
OpLog | 操作日志(类似 Binlog),用于主从同步 |
Aggregation Pipeline | 聚合管道,多阶段数据处理($match → $group → $sort ) |
Index | 索引(支持单字段、复合、地理空间、全文索引) |
TTL Index | 生存时间索引,自动过期数据(如日志) |
Mongos | 路由进程,协调分片集群的查询分发 |
Config Server | 存储集群元数据(分片映射关系) |
$lookup | 聚合阶段操作符,实现跨集合关联查询 |
Change Stream | 实时监听数据变更(类似触发器) |
二、MongoDB 安装
#上传软件包
mongodb-database-tools-rhel70-x86_64-100.12.0.rpm
mongodb-linux-x86_64-rhel8-8.0.8.tgz
mongosh-2.5.0-linux-x64-openssl3.tar
openssl-1.1.1w.tar.gz
#安装依赖包
dnf -y install libcurl openssl
#解压安装包
tar zxvf mongodb-linux-x86_64-rhel8-8.0.8.tgz
#将解压包拷贝到指定目录
mv mongodb-linux-x86_64-rhel8-8.0.8 /usr/local/mongodb
cd /usr/local/mongodb
vim /etc/profileexport PATH=/usr/local/mongodb/bin:$PATH
#启动执行文件
source /etc/profile
#创建目录
mkdir -p /var/lib/mongo
mkdir -p /var/log/mongodb
#设置当前用户的读写权限
chown 'whoami' /var/lib/mongo
chown 'whoami' /var/log/mongodb#由于mongodb依赖openssl11,需要编译安装openssl11
#安装依赖包
dnf -y install gcc perl
#解压安装包
tar zxvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
#编译安装openssl11
./config --prefix=/opt/openssl11 --openssldir=/opt/openssl11/ssl
make -j2
make install#设置openssl11环境变量
cd /opt
cd openssl11/
vim /etc/profileexport LD_LIBRARY_PATH=/opt/openssl11/lib:$LD_LIBRARY_PATH
#启动执行文件
source /etc/profile.d/openssl11.sh
#启动mongodb服务
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork##fork:守护进程
三、 MongoDB Shell
#解压安装包
tar zxvf mongosh-2.5.0-linux-x64-openssl3.tar
cd mongosh-2.5.0-linux-x64-openssl3
cd bin/
cp mongosh /usr/local/bin/
cp mongosh_crypt_vl.so /usr/local/bin/
#验证
mongosh --host <hostname> --port <port>
mongosh
四、数据库管理
1.查看数据库列表
>show dbs
//查看当前mongodb中所有数据库的列表
>db
//查看当前正在使用的数据库2.创建数据库
>use aaa
//使用【use 库名】命令创建数据库,如果数据库不存在则自动创建>db.aaa.insertOne({"":""}) //插入数据3.删除数据库
>db.dropDatabase()4. 默认数据库
默认数据库为 test ,若没创建新的数据库,数据默认放在这里。5.系统内置数据库
在数据库中,admin、config、local 是三个特殊的系统内置数据库admin:存储所有数据库的用户身份信息和全局权限,用户必须通过它认证后才可以执行跨库管理操作
config:仅在分片集群环境中存在,存储分片信息、块(chunk)分布、集合分片策略等关键元数据
local:存储当前节点的副本集状态、操作日志(oplog)等本地数据,数据不会被复制到其他节点,仅存在于当前实例。
五、集合管理
1. 查看集合
// 查看当前数据库所有集合
show collections// 查看集合详情(大小、文档数等)
db.getCollectionInfos({ name: "users" })
参数:
-
filter
:可选,过滤集合(如{ name: "users" }
)
2. 创建集合
db.createCollection(name, { capped: <boolean>, // 是否固定集合 size: <number>, // 固定集合大小(字节) max: <number>, // 固定集合最大文档数 storageEngine: <document>,// 存储引擎配置 validator: <document>, // 文档验证规则 ...
})
参数说明:
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
name | string | 必填 | 集合名称 |
capped | boolean | false | 是否固定大小(循环写入) |
size | number | - | 固定集合分配的字节大小 |
max | number | - | 固定集合允许的最大文档数 |
validator | document | {} | 文档结构验证规则(JSON Schema) |
3. 更新集合名
db.<oldCollectionName>.renameCollection( "<newCollectionName>", <dropTarget> // 可选
)
参数:
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
newCollectionName | string | 必填 | 新集合名称 |
dropTarget | boolean | false | 是否删除已存在的同名集合(危险!) |
oldCollectionName | 旧集合名称 |
4. 删除集合
db.<collection名称>.drop()
六、文档操作
1. 插入文档
(1)insertOne()- 插入单条文档
功能:向集合中插入一条新文档
语法:
db.集合名.insertOne( <文档>, // 【必填】要插入的文档(JSON对象) { writeConcern: <文档> // 【可选】写关注级别 }
)
参数说明:
参数 | 类型 | 说明 |
---|---|---|
文档 | JSON对象 | 要插入的数据(如 {name: "张三"} ) |
writeConcern | JSON文档 | 写操作确认级别(如 { w: 2 } 需2个节点确认) |
(2)insertMany()- 批量插入文档
功能:一次性插入多条文档
语法:
db.集合名.insertMany( [ <文档1>, <文档2>, ... ], // 【必填】文档数组 { ordered: <布尔值>, // 【可选】是否按顺序插入(默认true) writeConcern: <文档> // 【可选】写关注 }
)
参数说明:
参数 | 类型 | 说明 |
---|---|---|
文档数组 | 数组 | 多个文档组成的数组 |
ordered | 布尔值 | true :按序插入(出错停止)false :乱序插入(出错继续) |
(3)save() - 保存文档
功能:根据_id
存在与否执行插入或替换
语法:
db.集合名.save( <文档>, // 【必填】要保存的文档 { writeConcern: <文档> // 【可选】写关注 }
)
此方法已过时,建议使用 insertOne()
或 replaceOne()
替代
-
文档含
_id
且存在 → 执行替换 -
文档不含
_id
或不存在 → 执行插入
2. 查询文档
(1)find()方法- 查询多条文档
功能:查找所有匹配的文档(返回游标)
db.集合名.find( <查询条件>, // 【可选】筛选条件(如 `{age: {$gt: 25}}`) <字段投影> // 【可选】控制返回字段
)
参数说明:
参数 | 类型 | 说明 |
---|---|---|
查询条件 | JSON文档 | 查询条件(空对象 {} 查所有) |
字段投影 | JSON文档 | 指定返回字段{字段:1} :包含{字段:0} :排除 |
常用操作符:
操作符 | 含义 | 示例 |
---|---|---|
$gt | 大于 | {age: {$gt: 25}} |
$in | 包含 | {role: {$in: ["admin","vip"]}} |
$regex | 正则匹配 | {name: {$regex: "^张"}} |
(2)findOne() 方法- 查询单条文档
功能:返回第一条匹配的文档
db.集合名.findOne( <查询条件>, // 【可选】筛选条件 <字段投影> // 【可选】控制返回字段
)
特点:
-
直接返回文档对象(非游标)
-
无匹配时返回
null
3. 删除文档
(1)deleteOne() - 删除单条文档
功能:删除第一条匹配的文档
语法:
db.集合名.deleteOne( <筛选条件>, // 【必填】删除条件 { writeConcern: <文档> // 【可选】写关注 }
) 返回结果:{ "acknowledged": true, "deletedCount": 1 }
(2)deleteMany() - 批量删除文档
功能:删除所有匹配的文档
语法
db.集合名.deleteMany( <筛选条件>, // 【必填】删除条件 { writeConcern: <文档> // 【可选】写关注 }
)
(3)findOneAndDelete() - 查找并删除
功能:删除并返回被删除的文档
语法:
db.集合名.findOneAndDelete( <筛选条件>, { projection: <文档>, // 【可选】返回字段控制 sort: <文档>, // 【可选】排序条件 writeConcern: <文档> }
)
4. 更新文档
(1)updateOne() - 更新单条文档
功能:更新第一条匹配的文档
语法:
db.集合名.updateOne( <筛选条件>, <更新操作>, // 【必填】更新指令 { upsert: <布尔值>, // 【可选】无匹配时是否插入(默认false) writeConcern: <文档> }
)
常用更新操作符:
操作符 | 功能 | 示例 |
---|---|---|
$set | 设置字段值 | {$set: {status: "活跃"}} |
$inc | 字段值增减 | {$inc: {库存: -1}} |
$push | 数组添加元素 | {$push: {tags: "VIP"}} |
(2)updateMany() - 批量更新文档
功能:更新所有匹配的文档
语法:
db.集合名.updateMany( <筛选条件>, <更新操作>, { upsert: <布尔值>, writeConcern: <文档> }
)
(3)replaceOne() - 替换整篇文档
功能:完全替换匹配的文档(覆盖所有字段)
语法:
db.集合名.replaceOne( <筛选条件>, <新文档>, // 【必填】完整新文档 { upsert: <布尔值>, writeConcern: <文档> }
)
(4)findOneAndUpdate() - 查找并更新
功能:更新并返回文档(可选返回更新前/后状态)
语法:
db.集合名.findOneAndUpdate( <筛选条件>, <更新操作>, { projection: <文档>, // 【可选】返回字段控制 sort: <文档>, // 【可选】排序条件 upsert: <布尔值>, returnDocument: "before"或"after", // 【可选】返回更新前/后文档 writeConcern: <文档> }
)
七、MongoDB 备份与恢复
1. 安装备份与恢复命令
#mongodb数据备份
备份:mongodump
恢复:mongorestore
rpm -ivh mongodb-database-tools-rhel70-x86_64-100.12.0.rpm
2. MongoDB 数据备份
命令语法:
>mongodump -h dbhost -d dbname -o dbdirectory
解释:
-h : MongoDB 所在服务器地址
-d : 需要备份的数据库实例
-o : 备份的数据库存放位置,需要提前建立
3. MongoDB 数据恢复
命令语法:
>mongorestore -h <hostname><:port> -d dbname <path>
解释:
- --host <:port>, -h <:port>: MongoDB 所在服务器地址,默认为:localhost:27017
- --db , -d :需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如 test2
- --drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
- <path>: mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。你不能同时指定<path> 和 --dir 选项,--dir 也可以设置备份目录。
- --dir: 指定备份的目录,你不能同时指定<path> 和 --dir 选项。
八、MongoDB 用户管理
1. 连接数据库
mongosh
2. 切换到目标数据库
use test
3. 创建用户
db.createUser 命令创建用户并分配角色
例:db.createUser({
user: "testuser",
pwd:"password123"
roles: [
{ role:"readWrite",db: "<database_name>"},
{ role:"dbAdmin", db: "<database_name>"}
] })
4. 验证用户
db.auth 命令验证用户
例:db.auth("testuser","password123")
5. 启用身份验证
配置文件(mongod.conf),添加下面内容
security:
authorization: "enabled"
重启MongoDB
或者
在启动命令中添加认证参数
mongod --auth --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
6. 使用用户身份登录
mongosh --host <hostname> --port <port> -u "testuser" -p "password123" --authenticationDatabase "<database_name>"
7. 删除用户
db.dropUser("")