MongoDB基础知识点

MongoDB基础知识点

1.MongoDB简介

1.1基本信息

  • 基于分布式文件存储数据
  • C++语言编写
  • 支持的数据结构非常松散,是类似json的bson格式(后期插入修改数据写JSON)

1.2作用

  • 存放项目数据
  • 实战工作开发写API接口

1.3下载

2.MongoDB安装

1.Ubuntu22.04

2.Windows(非msi)

shell 复制代码
# 解压ZIP安装包

# 创建服务(cmd管理员模式下进行   D:\mongodb\bin(根据自己实际情况来))
bin>mongod --install -dbpath D:\mongodb\data --logpath D:\mongodb\logs\mongodb.log
#######或############
bin>mongod --dbpath D:\mongodb\data --logpath D:\mongodb\logs\mongodb.log --logappend --serviceName MongoDB --auth --install 

# 启动服务
bin>net start mongodb

# 验证安装是否成功
bin>mongo

# 删除服务
bin>mongod.exe --remove
###########或####################
bin>sc delete mongodb

#关闭服务
net stop mongodb

3.MongoDB基本操作

1.基本概念

  • 查看数据库
sql 复制代码
show databases
# 或
show dbs
  • 创建数据库,不建议使用单独命令创建数据库,使用use隐式创建
  • 查看当前数据库
sql 复制代码
db
  • 选择数据库
sql 复制代码
use 数据库名称
  • 删除数据库,通过use选择需要删除的数据库,执行以下命令
sql 复制代码
db.dropDatabase()
  • 查看集合
sql 复制代码
show collections
  • 创建集合
    • capped: 布尔值,指定是否创建固定。这种集合有大小限制,一旦达到上限,新的文档会覆盖旧的文档,默认为'false'
    • size:指定固定集合的大小上限(字节数),只有在创建固定集合时才需要设置
    • max: 指定固定集合的文档数上限,只有在创建固定集合时才需要设置
    • autoIndexId: 布尔值,指定是否自动为'_id'字段创建索引,默认为true <该字段与Mongodb3.6弃用>
    • 其他字段建议参考官方文档
sql 复制代码
db.createCollection("集合名词",{
	capped: true,
	size: 5242880,
	max: 5000

})
  • 删除集合
sql 复制代码
db.集合名称.drop()
  • 统计集合
sql 复制代码
db.集合名称.count()

2.MongoDB文件增删改查(CURD)

1.插入数据

  • 集合存在,则直接插入数据,集合不存在,则隐式创建 <过时>
sql 复制代码
db.集合名称.insert(json数据)
  • insertOne

    • 插入单个文档到集合
    sql 复制代码
    db.集合名词.insertOne({<文档数据>})
  • insertMany

    • 插入多个文档到集合中
    javascript 复制代码
    db.集合名词.insertMany([{文档数据1},{文档数据2},{文档数据3},...])
  • 查看集合数据

    • mongodb会给插入的每条数据插入一个_id,_id的组成为时间戳 (4)+机器码 (3)+PID (2)+计数器(3)
    • 可以自定义_id,只需要在插入的数据中添加_id即覆盖(不推荐使用)
sql 复制代码
db.集合名称.find()
  • 插入多条数据 (且数据量不大时)<过时>
sql 复制代码
db.集合名称.insert({},{},{})
  • 插入多条数据 (且数据量较大时)
    • 可以使用js语法,mongodb底层采用的是JS引擎,支持部分JS语法
sql 复制代码
for(var i = 0;i <= 10; i++){
	db.infoT.insert({uname: 'a'+i,age: i+1})
	}

2.查询数据

  • 查看集合数据
sql 复制代码
db.集合名称.find(条件 [,查询的列])
  • 复合查询
sql 复制代码
db.集合名称.find({键:{运算符: 值}}
运算符 作用
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in in
$nin not in

3.修改数据

  • 修改数据
    • 是否新增:指条件匹配不到的数据插入(true是插入,false不插入,默认)
    • 是否修改多条: 指将匹配成功的数据都修改(true是,默认是false)
    • updateOne: 用于更新满足条件的第一个文档
    • updateMany: 用于更新满足条件的所有文档
sql 复制代码
db.集合名称.update(条件,{修改器:{键: 值}})
修改器 作用
$inc 递增
$rename 重命名列
$set 修改列值
$unset 删除列

4.删除数据

  • deleteOne

    • 用于删除满足条件的第一个文档
    sql 复制代码
    db.文档名称.deleteOne({条件})
  • deleteMany

    • 用于删除满足条件的所有文档
    sql 复制代码
    db.文档名称.deleteMany({条件})
  • 删除所有文档

    sql 复制代码
    db.文档名称.deleteMany({})

5.删除字段

  • 聚合管道方式
    • fieldToDelete代表需要删除的字段
javascript 复制代码
db.collection.aggregate([
	{ $project: {fieldToDelete: 0}},
	{$unset: ["fieldToDelete"]}
])
  • 删除单个文档方式
    • _id用来定位要更新的文档
    • fieldToDelete代表需要删除的字段
javascript 复制代码
db.collection.updateOne({_id: docId},{$unset: {fieldToDelete: 1}})

4.MongoDB实战管理系统数据库设计

1.设计数据库

  • 确定功能模块所属集合

  • 确定集合字段

    • UI设计稿每个展示内容对应一个字段
    • 创建字段
    • 更新字段
    • 状态字段
  • 练习

    • 需求:根据学生管理系统,设置存放学生信息的集合,并插入20条数据
    • 代码:
      • 先中文
        • 集合名词: 学生集合
        • 集合字段: 编号、学号、姓名、电话、性别、年龄、学历、备注
      • 再英文
javascript 复制代码
use studentInfoList;

for(var num = 0;num <= 30;num++){
	db.student.insertOne({
		_id: num,
		no: "KD"+num,
		uname: '华中科技'+num,
		tel: "0218522"+num,
		sex: '女',
		age: num,
		edt: '研究生',
		remark: "勤奋好学"
	})
};
db;
show collections;
db.student.find();

2.Mongodb分页&排序

2.1排序

  • 升序排列集合中的数据
javascript 复制代码
db.collection.find().sort({key: 1})
  • 降序排列集合中的数据
javascript 复制代码
db.collection.find().sort({key: -1})
  • 指定排序字段并排除其他字段
javascript 复制代码
db.collection.find({},{key: 1}).sort({key: 1})
  • 多字段进行排序
javascript 复制代码
db.collection.find().sort({key1: 1,key2: -1})

2.2分页

  • 查询第一页的数据,且每页包含2条数据
javascript 复制代码
db.collection.find().sort({key: 1}).limit(2)
  • 查询第二页的数据,每页包含2条数据,skip()函数指定从结果集中跳过的记录数
javascript 复制代码
db.collection.find().sort({key: 1}).skip(2).limit(2)

3.MongoDB聚合查询

javascript 复制代码
db.collection.aggregate([
	{管道: {表达式}}
])
  • 常用管道
管道器 说明
$group 将集合中的文档分组,用于统计结果
$match 过滤数据,只要输出符合条件的文档
$sort 聚合数据进一步排序
$skip 跳过指定文档数
$limit 限制集合数据返回文档数
  • 常用表达式
表达式 说明
$sum 总和 $sum: 1同count表示统计
$avg 平均
$min 最小值
$max 最大值

4.MongoDB优化索引

1.概括

  • 说明
    • 索引是一种排序的便于快速查询的数据结构
  • 作用
    • 实现数据的高效查询
  • 优缺点
    • 优点
      • 提高数据查询的效率,降低数据库的IO成本
      • 通过索引对数据进行排序,降低数据排序成本,降低CPU的消耗
    • 缺点
      • 占用磁盘空间
      • 大量索引影响SQL语句的效率,每次插入或修改数据都需要更新索引

2.创建索引

  • 创建单个索引语法
    • 1代表升序 -1代表降序
javascript 复制代码
db.collection.createIndex({key: 1})
  • 创建多个字段复合索引
javascript 复制代码
db.collection.createIndex({key1: 1,key2: -1})
  • 添加唯一索引
javascript 复制代码
db.collection.createIndex({key: 1},{unique: 字段名})
  • 添加索引并指定索引名词
javascript 复制代码
db.collection.createIndex({key: 1},{name: "指定名称"})

3.删除索引

  • 删除全部索引
javascript 复制代码
db.collection.dropIndexes()
  • 删除指定索引
javascript 复制代码
db.collection.dropIndex(索引名)

4.查看索引

  • 查看索引
javascript 复制代码
db.collection.getIndexes()

5.分析索引

  • 分析索引
    • COLLESAN 全表扫描
    • IXSCAN 索引扫描
    • FETCH 根据索引去检索指定文档
javascript 复制代码
db.collection.find().explain('executionStats')
  • 未添加索引进行分析索引
javascript 复制代码
db.collection.find({age: 88888}).explain('executionStats')
  • 添加索引进行分析索引
javascript 复制代码
db.stuInfo.createIndex({age: 1});
db.stuInfo.getIndexes();
db.stuInfo.find({age: 88888}).explain('executionStats')

5.MongoDB权限机制

1.设置权限

javascript 复制代码
use 数据库名称

db.createUser({
	"user: "账号",
	"pwd": "密码",
	"roles": [{
		role: "角色",
		db: "所属数据库"
	}]
})
角色种类 说明
root 超级用户角色
read、readwrite 数据库用户角色
dbAdmin、userAdmin 数据库管理角色
clusterAdmin、clusterManager、clusterMonitor、hostManager 集群管理角色
backup、restore 备份恢复角色

2.开启验证模式

  • 指用户需要输入账号密码才能登录使用
javascript 复制代码
use admin
db.createUser({
	"user": "admin",
	"pwd": "1234567",
	"roles": [{
		role: "root",
		db: "admin"
	}]
})
  • 安装需要身份验证的MongoDB服务(windows)
javascript 复制代码
/bin>mongod.exe --install --dbpath D:\MongoDB\data --logpath D:\MongoDB\log\mongodb2.log --auth

/bin>net start mongodb

3.登录(windows)

javascript 复制代码
/bin> mongo 服务器IP地址:端口/数据 -u 用户名 -p 密码

或

mongo
use 数据库名
db.auth(用户名,密码)

6.MongoDB备份还原

1.备份数据库

  • 参数解析
    • port 数据库端口
    • d 数据库(数据库不写则导出全局)
    • o 备份数据放入指定目录
shell 复制代码
/bin>mongodump -h -port -u -p -d -o

2.还原数据库

  • 参数解析
    • d不写则还原全部数据
shell 复制代码
/bin>mongorestore -h -port -u -p -d --drop 备份数据目录
相关推荐
007php0079 分钟前
家庭智慧工程师:如何通过科技提升家居生活质量
数据库·python·云原生·架构·golang·php·postman
沃和莱特36 分钟前
C++中类的继承
数据库·c++·编程·c·指针·友元函数
FF在路上1 小时前
MySQL数据库-视图的介绍和使用
数据库·sql·mysql
数字扫地僧2 小时前
如何使用MySQL实现多租户架构:设计与实现全解析
数据库·mysql·架构
乄bluefox2 小时前
SpringBoot中使用Sharding-JDBC实战(实战+版本兼容+Bug解决)
java·数据库·spring boot·redis·后端·缓存·bug
尘佑不尘2 小时前
蓝队基础,了解企业安全管理架构
数据库·笔记·安全·web安全·蓝队
重生之我是数学王子2 小时前
QT 网络编程 数据库模块 TCP UDP QT5.12.3环境 C++实现
数据库·c++·qt·udp·tcp
running up that hill3 小时前
数据库中的增删改查操作、聚合函数、内置函数、分组查询
java·数据库·sql·mysql
莳花微语3 小时前
oracle如何配置第二个监听优化数据传输
数据库·oracle·php
小码的头发丝、3 小时前
Maven的安装与配置
java·数据库·maven