MongoDB基础知识点

1.MongoDB简介

1.1基本信息

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

1.2作用

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

1.3下载

2.MongoDB安装

1.Ubuntu22.04

2.Windows(非msi)

# 解压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.基本概念

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

})
  • 删除集合
db.集合名称.drop()
  • 统计集合
db.集合名称.count()

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

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

在这里插入图片描述

2.查询数据
  • 查看集合数据
db.集合名称.find(条件 [,查询的列])
  • 复合查询
db.集合名称.find({键:{运算符: 值}}
运算符作用
$gt大于
$gte大于等于
$lt小于
$lte小于等于
$ne不等于
$inin
$ninnot in
在这里插入图片描述
3.修改数据
  • 修改数据
    • 是否新增:指条件匹配不到的数据插入(true是插入,false不插入,默认)
    • 是否修改多条: 指将匹配成功的数据都修改(true是,默认是false)
    • updateOne: 用于更新满足条件的第一个文档
    • updateMany: 用于更新满足条件的所有文档
db.集合名称.update(条件,{修改器:{键: 值}})
修改器作用
$inc递增
$rename重命名列
$set修改列值
$unset删除列

在这里插入图片描述

4.删除数据
  • deleteOne
    • 用于删除满足条件的第一个文档
    db.文档名称.deleteOne({条件})
    
  • deleteMany
    • 用于删除满足条件的所有文档
    db.文档名称.deleteMany({条件})
    
  • 删除所有文档
    db.文档名称.deleteMany({})
    

在这里插入图片描述

5.删除字段
  • 聚合管道方式
    • fieldToDelete代表需要删除的字段
db.collection.aggregate([
	{ $project: {fieldToDelete: 0}},
	{$unset: ["fieldToDelete"]}
])

  • 删除单个文档方式
    • _id用来定位要更新的文档
    • fieldToDelete代表需要删除的字段
db.collection.updateOne({_id: docId},{$unset: {fieldToDelete: 1}})

在这里插入图片描述

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

1.设计数据库

  • 确定功能模块所属集合

  • 确定集合字段

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

    • 需求:根据学生管理系统,设置存放学生信息的集合,并插入20条数据
    • 代码:
      • 先中文
        • 集合名词: 学生集合
        • 集合字段: 编号、学号、姓名、电话、性别、年龄、学历、备注
      • 再英文
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排序
  • 升序排列集合中的数据
db.collection.find().sort({key: 1})
  • 降序排列集合中的数据
db.collection.find().sort({key: -1})
  • 指定排序字段并排除其他字段
db.collection.find({},{key: 1}).sort({key: 1})
  • 多字段进行排序
db.collection.find().sort({key1: 1,key2: -1})

在这里插入图片描述

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

在这里插入图片描述

3.MongoDB聚合查询

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

在这里插入图片描述

4.MongoDB优化索引

1.概括
  • 说明
    • 索引是一种排序的便于快速查询的数据结构
  • 作用
    • 实现数据的高效查询

在这里插入图片描述

  • 优缺点
    • 优点
      • 提高数据查询的效率,降低数据库的IO成本
      • 通过索引对数据进行排序,降低数据排序成本,降低CPU的消耗
    • 缺点
      • 占用磁盘空间
      • 大量索引影响SQL语句的效率,每次插入或修改数据都需要更新索引
2.创建索引
  • 创建单个索引语法
    • 1代表升序 -1代表降序
db.collection.createIndex({key: 1})
  • 创建多个字段复合索引
db.collection.createIndex({key1: 1,key2: -1})
  • 添加唯一索引
db.collection.createIndex({key: 1},{unique: 字段名})
  • 添加索引并指定索引名词
db.collection.createIndex({key: 1},{name: "指定名称"})
3.删除索引
  • 删除全部索引
db.collection.dropIndexes()
  • 删除指定索引
db.collection.dropIndex(索引名)
4.查看索引
  • 查看索引
db.collection.getIndexes()

在这里插入图片描述

5.分析索引
  • 分析索引
    • COLLESAN 全表扫描
    • IXSCAN 索引扫描
    • FETCH 根据索引去检索指定文档
db.collection.find().explain('executionStats')
  • 未添加索引进行分析索引
db.collection.find({age: 88888}).explain('executionStats')

在这里插入图片描述

  • 添加索引进行分析索引
db.stuInfo.createIndex({age: 1});
db.stuInfo.getIndexes();
db.stuInfo.find({age: 88888}).explain('executionStats')

在这里插入图片描述

5.MongoDB权限机制

1.设置权限
use 数据库名称

db.createUser({
	"user: "账号",
	"pwd": "密码",
	"roles": [{
		role: "角色",
		db: "所属数据库"
	}]
})
角色种类说明
root超级用户角色
read、readwrite数据库用户角色
dbAdmin、userAdmin数据库管理角色
clusterAdmin、clusterManager、clusterMonitor、hostManager集群管理角色
backup、restore备份恢复角色
2.开启验证模式
  • 指用户需要输入账号密码才能登录使用
use admin
db.createUser({
	"user": "admin",
	"pwd": "1234567",
	"roles": [{
		role: "root",
		db: "admin"
	}]
})
  • 安装需要身份验证的MongoDB服务(windows)
/bin>mongod.exe --install --dbpath D:\MongoDB\data --logpath D:\MongoDB\log\mongodb2.log --auth

/bin>net start mongodb
3.登录(windows)
/bin> mongo 服务器IP地址:端口/数据 -u 用户名 -p 密码

或

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

6.MongoDB备份还原

1.备份数据库
  • 参数解析
    • port 数据库端口
    • d 数据库(数据库不写则导出全局)
    • o 备份数据放入指定目录
/bin>mongodump -h -port -u -p -d -o
2.还原数据库
  • 参数解析
    • d不写则还原全部数据
/bin>mongorestore -h -port -u -p -d --drop 备份数据目录
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB是一个开源的、跨平台的、面向文档的NoSQL数据库管理系统。它以JSON风格的文档存储数据,具有灵活的数据模型和强大的查询能力。以下是一些MongoDB的知识点: 1. 数据模型:MongoDB使用BSON(二进制JSON)格式存储数据,可以存储复杂的数据结构,如嵌套文档和数组。每个文档都有一个唯一的_id字段作为主键。 2. 集合和文档:MongoDB将数据组织成集合(Collection),每个集合包含多个文档(Document)。文档类似于关系数据库中的行,但没有固定的模式。 3. 查询:MongoDB支持丰富的查询语法,包括比较、逻辑、正则表达式等操作符。可以使用find()方法进行查询,并可以使用索引来提高查询性能。 4. 索引:MongoDB支持创建索引来加速查询。常见的索引类型包括单字段索引、复合索引、文本索引等。可以使用ensureIndex()方法创建索引。 5. 聚合管道:MongoDB提供了聚合管道(Aggregation Pipeline)功能,可以对集合中的文档进行多阶段的数据处理和转换。 6. 复制和故障转移:MongoDB支持数据复制和故障转移,通过复制集(Replica Set)来提供数据的冗余和高可用性。 7. 分片:MongoDB支持数据分片(Sharding),可以将数据分散存储在多个服务器上,提高数据存储和查询的性能。 8. 安全性:MongoDB提供了访问控制、身份验证和加密等安全功能,可以保护数据的机密性和完整性。 以上只是MongoDB的一些基本知识点,还有更多高级的功能和特性可以进一步学习和探索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值