MongoDB基础知识点

news2024/11/19 1:22:02

MongoDB基础知识点

    • 1.MongoDB简介
      • 1.1基本信息
      • 1.2作用
      • 1.3下载
    • 2.MongoDB安装
      • 1.Ubuntu22.04
      • 2.Windows(非msi)
    • 3.MongoDB基本操作
      • 1.基本概念
      • 2.MongoDB文件增删改查(CURD)
        • 1.插入数据
        • 2.查询数据
        • 3.修改数据
        • 4.删除数据
        • 5.删除字段
    • 4.MongoDB实战管理系统数据库设计
      • 1.设计数据库
      • 2.Mongodb分页&排序
        • 2.1排序
        • 2.2分页
      • 3.MongoDB聚合查询
      • 4.MongoDB优化索引
        • 1.概括
        • 2.创建索引
        • 3.删除索引
        • 4.查看索引
        • 5.分析索引
      • 5.MongoDB权限机制
        • 1.设置权限
        • 2.开启验证模式
        • 3.登录(windows)
      • 6.MongoDB备份还原
        • 1.备份数据库
        • 2.还原数据库

1.MongoDB简介

1.1基本信息

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

1.2作用

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

1.3下载

  • MongoDB官网

2.MongoDB安装

1.Ubuntu22.04

  • Ubuntu22.04安装MongoDB7.0

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 备份数据目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/962289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++ folly::baton

Baton folly::Baton 是 Facebook 开源的一个同步原语&#xff0c;它提供了一种简单而灵活的方式来进行线程间的同步。它属于 Folly 库&#xff0c;是 C 编程语言的一个组件。 Baton 通常用作线程间同步、等待、通知的标识符号&#xff0c;常用姿势是&#xff0c;一些线程调用…

正中优配:红筹股是啥意思?

随着我国经济的高速开展&#xff0c;越来越多的人开始参加到股票出资中。其中&#xff0c;红筹股作为一种特别类型的股票&#xff0c;备受一些出资者的关注&#xff0c;但对于一般出资者来说&#xff0c;红筹股详细含义还不是特别清楚。本文将从多个角度探讨红筹股的含义、特征…

分库分表知识大全及Sharding-JDBC实践

文章目录 一、为什么要分库分表1.1 什么是分库1.2 什么是分表1.3 为什么要分库1.3.1 磁盘存储1.3.2 并发连接支撑 1.4 为什么要分表 二、分库分表解决方案2.1 垂直&#xff08;纵向&#xff09;切分2.1.1 垂直切分优点2.1.2 垂直切分缺点 2.2 水平&#xff08;横向&#xff09;…

了解NAT

局域网内的终端是如何共用一个wan口来上网的&#xff1f; 主要通过NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;协议来实现的 NAT是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地…

无涯教程-Flutter - 数据库

SQLite" class"css-1occaib">SQLite数据库是基于事实和标准SQL的嵌入式数据库引擎&#xff0c;它是小型且经过时间考验的数据库引擎&#xff0c;sqflite软件包提供了许多函数&#xff0c;可以有效地与SQLite数据库一起使用&#xff0c;它提供了操作SQLite数据…

【FreeRTOS】互斥量的使用与逐步实现

在FreeRTOS中&#xff0c;互斥量是一种用于保护共享资源的同步机制。它通过二进制信号量的方式&#xff0c;确保在任意时刻只有一个任务可以获取互斥量并访问共享资源&#xff0c;其他任务将被阻塞。使用互斥量的基本步骤包括创建互斥量、获取互斥量、访问共享资源和释放互斥量…

nepctf2023 部分web复现

目录 <1> EZJAVA_CHECKIN(shiro550) <2> 独步天下-转生成为镜花水月中的王者(环境变量提权) <3> 独步天下-破除虚妄_探见真实(Venom代理&ping%0a绕过rce&c文件描述符未关闭连接父进程修改文件权限) <4> 独步天下-破除试炼_加冕成王(tp6rceu…

STM32F103C8T6引脚图及引脚功能说明

内容部分引用STM32F103C8T6引脚图_karwen2020的博客-CSDN博客_stm32引脚图

1688采集商品主图,价格,规格接口

采集1688商品主图&#xff0c;价格接口&#xff0c;点击测试 在如今的电商时代&#xff0c;越来越多的人开始选择在1688平台上寻找商品&#xff0c;而采集软件的方式也有很多种&#xff0c;但是在市面上&#xff0c;各种采集软件琳琅满目&#xff0c;令人眼花缭乱&#xff0c;…

【玩玩Vue】使用el-menu作为菜单时,通过一二级路由控制菜单高亮

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、Vue路由二、路由一级控制高亮&#xff08;常用&#xff09;1.vue中路由文件2.网址样式3.Vue文件4.$route的内容 三、路由二级控制高亮…

基于白鲸算法优化的BP神经网络(预测应用) - 附代码

基于白鲸算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于白鲸算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.白鲸优化BP神经网络2.1 BP神经网络参数设置2.2 白鲸算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…

Multisim14.0仿真(四)方波发生器

一、仿真原理图&#xff1a; 二、仿真效果&#xff1a;

C语言 语法积累

参考博文&#xff1a; c语言中int默认是有符号还是无符号,C语言迷题&#xff1a;有符号数与无符号数的问题_旋斡勃人的博客-CSDN博客前些天偶然看到了一个收集C语言迷题的网站&#xff0c;很是感兴趣。本人对C/C语言本身很是感兴趣&#xff0c;曾经做过几年相应的开发&#xf…

「网页开发|前端开发|Vue」02 从单页面到多页面网站:使用路由实现网站多个页面的展示和跳转

本文主要介绍如何使用路由控制来实现将一个单页面网站扩展成多页面网站&#xff0c;包括页面扩展的逻辑&#xff0c;vue的官方路由vue-router的基本用法以及扩展用法 文章目录 本系列前文传送门一、场景说明二、基本的页面扩展页面扩展是在扩什么创建新页面的代码&#xff0c;…

基于BES2300YP 蓝牙耳机在线EQ调整功能设计

+他V hezkz17进数字音频系统研究开发交流答疑群(课题组) 1 BES SDK支持EQ 在运行中修改 </

Python 画图:饼图,箱线图

饼图 饼图&#xff08;pie char&#xff09;是一个划分为几个扇形的圆形统计图表&#xff0c;一般用于描述频率或百分比之间的相对关系。在饼图中&#xff0c;每个扇区的弧长&#xff08;以及圆心角和面积&#xff09;的大小与其所表示的数量呈固定比例。画饼图使用 pyplot 中…

C语言入门 Day_11 判断的嵌套

目录 前言 1.判断的嵌套 2.switch判断 3.易错点 4.思维导图 前言 之前我们都只是面临的简单判断&#xff0c;也就是面对的是两三种不同的判断条件&#xff0c;执行两三种不同的代码分支。 但是让我们遇到更复杂的情况&#xff0c;需要进行更复杂的判断的时候。就需要使用…

编程题四大算法思想(三)——贪心法:找零问题、背包问题、任务调度问题

文章目录 贪心法找零问题&#xff08;change-making problem&#xff09;贪心算法要求基本思想适合求解问题的特征 背包问题0/1背包问题0/1背包问题——贪心法 分数背包问题 任务调度问题 贪心法 我在当前情况下&#xff0c;我把我做到最好。我也不管全局如何&#xff0c;整体如…

计算机图形软件(三)6-4 使用GLUT进行显示窗口管理

使用GLUT进行显示窗口管理 我们从使用简化的、最少的操作来显示一个图开始。使用 OpenGL 实用库的第一步是初始化GLUT。该初始化函数也能处理任何命令行变量&#xff0c;但不需要在第一个示例程序中使用参数。完成GLUT初始化的语句是 glutInit (&argc&#xff0c;argv); …

14 mysql bit/json/enum/set 的数据存储

前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 bit/json/enum/set 类类型的相关…