MongoDB基础知识点

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.mzph.cn/news/63762.shtml

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

相关文章

Laravel chunk和chunkById的坑

在编写定时任务脚本的时候&#xff0c;经常会用到chunk和chunkById的API。 一、前言 数据库引擎为innodb。 表结构简述&#xff0c;只列出了本文用到的字段。 字段类型注释idint(11)IDtypeint(11)类型mark_timeint(10)标注时间&#xff08;时间戳&#xff09; 索引&#x…

279. 完全平方数

279.完全平方数 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 …

机器学习笔记之核函数再回首:Nadarya-Watson核回归python手写示例

机器学习笔记之核函数再回首——Nadaraya-Watson核回归手写示例 引言回顾&#xff1a; Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归通过核函数描述样本之间的关联关系使用 Softmax \text{Softmax} Softmax函数对权重进行划分将权重与相应标签执行加权运算 N…

Linux centos7 bash编程——-求质数和

训练项目&#xff1a;使用函数求质数和。 定义一个函数IsPrime()&#xff0c;据此判断一个数是否为质数 由用户输入一个整数&#xff0c;求出比此数大的两个最小质数之和。 一、解决思路: 1.先在键盘上输入一个整数 2.求出比此数大的最小质数 3.再求出比此质数大的另一个…

使用正则提取字符串中的json数据

需求&#xff1a; 我们有一个这样的字符串 以下数据&#xff1a;{"title": "标题一", "text": "内容一", "tag": "tag1"}{"title": "标题二", "text": "内容二", &quo…

ChatGPT 实现动态地图可视化展示

地图可视化分析有许多优点和好处: 1.直观理解:地图可视化使得复杂的数据更易于理解。通过地图可视化,人们可以直观地看到地理位置、地区之间的关系以及空间分布的模式。 2.提高决策效率:地图可视化可以帮助决策者快速理解和解释数据,从而提高决策效率。 3.高效的数据整…

【java web】论坛实现帖子回复(仿牛客网),帮助大家理清逻辑

一、common表的情况 CREATE TABLE comment (id int NOT NULL AUTO_INCREMENT,user_id int DEFAULT NULL,entity_type int DEFAULT NULL,entity_id int DEFAULT NULL,target_id int DEFAULT NULL,content text,status int DEFAULT NULL,create_time timestamp NULL DEFAULT NUL…

【Pandas 入门-5】Pandas 画图

Pandas 画图 除了结合 matplotlib 与 seaborn 画图外&#xff0c;Pandas 也有自己的画图函数plot&#xff0c;它的语法一般为&#xff1a; DataFrame.plot(xNone,yNone, kindline,subplotsFalse, titleNone)x横坐标数据y纵坐标数据kind默认是线图&#xff0c;还可以是‘bar’…

基于单片机的串行通信发射机设计

一、项目介绍 串行通信是一种常见的数据传输方式&#xff0c;允许将数据以比特流的形式在发送端和接收端之间传输。当前实现基于STC89C52单片机的串行通信发射机&#xff0c;通过红外发射管和接收头实现自定义协议的数据无线传输。 二、系统设计 2.1 单片机选择 在本设计中&…

代码随想录二刷day04

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣24. 两两交换链表中的节点二、力扣19. 删除链表的倒数第 N 个结点三、力扣面试题 02.07. 链表相交四、力扣142. 环形链表 II 前言 一、力扣24. 两两交换…

【AI】《动手学-深度学习-PyTorch版》笔记(二十):图像增强、微调

AI学习目录汇总 1、图像增强 图像增强可以扩展训练样本数量、减小对某个属性的依赖。比如,裁剪图像,可以减少模型对对象出现位置的依赖;调整亮度、颜色等因素来降低模型对颜色的敏感度等 1.1、准备工作 头文件 %matplotlib inline:图表直接嵌入到Notebook中,本人使用的…

缓存技术(缓存穿透,缓存雪崩,缓存击穿)

大家好 , 我是苏麟 , 今天聊一聊缓存 . 这里需要一些Redis基础 (可以看相关文章等) 本文章资料来自于 : 黑马程序员 如果想要了解更详细的资料去黑马官网查看 前言:什么是缓存? 缓存,就是数据交换的 缓冲区 (称作Cache [ kʃ ] ),俗称的缓存就是缓冲区内的数据,是存贮数据的…

C语言——多文件编程

多文件编程 把函数声明放在头文件xxx.h中&#xff0c;在主函数中包含相应头文件在头文件对应的xxx.c中实现xxx.h声明的函数 防止头文件重复包含 当一个项目比较大时&#xff0c;往往都是分文件&#xff0c;这时候有可能不小心把同一个头文件 include 多次&#xff0c;或者头…

十六、pikachu之SSRF

文章目录 1、SSRF概述2、SSRF&#xff08;URL&#xff09;3、SSRF&#xff08;file_get_content&#xff09; 1、SSRF概述 SSRF(Server-Side Request Forgery&#xff1a;服务器端请求伪造)&#xff1a;其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能&…

Spring容器及实例化

一、前言 Spring 容器是 Spring 框架的核心部分&#xff0c;它负责管理和组织应用程序中的对象&#xff08;Bean&#xff09;。Spring 容器负责创建、配置和组装这些对象&#xff0c;并且可以在需要时将它们提供给应用程序的其他部分。 Spring 容器提供了两种主要类型的容器&…

面试系列 - JVM内存模型和调优详解

目录 一、JVM内存模型 1. 程序计数器&#xff08;Program Counter Register&#xff09;&#xff1a; 2.Java虚拟机栈&#xff08;Java Virtual Machine Stacks&#xff09;&#xff1a; 3. 本地方法栈&#xff08;Native Method Stack&#xff09;&#xff1a; 5. 方法区…

matlab绘制局部放大图

ZoomPlot是一个交互式的matlab局部绘图库&#xff0c;其github仓库地址为 https://github.com/iqiukp/ZoomPlot-MATLAB。在使用库之前需要先将库下载到本地&#xff0c;可以直接添加到matlab的库中&#xff0c;也可以放在项目文件中直接使用。 简单使用 其实使用这个库只需要…

【SpringCloud】SpringCloud整合openFeign

文章目录 前言1. 问题分析2. 了解Feign3. 项目整合Feign3.1 引入依赖3.2 添加注解3.3 编写Feign客户端3.4 测试3.5 总结 4. 自定义配置4.1 配置文件方式4.2 Java代码方式 5. Feign使用优化5.1 引入依赖5.2 配置连接池 6. Feign最佳实践6.1 继承方式6.2 抽取方式 前言 微服务远…

【ES6 新特性】

ES6 新特性 1、let 声明变量2、const 声明常量&#xff08;只读变量&#xff09;3、解构表达式1&#xff09;、数组解构2&#xff09;、对象解构 4、字符串扩展1&#xff09;、几个新的 API2&#xff09;、字符串模板 5、函数优化1&#xff09;、函数参数默认值2&#xff09;、…

MySQL连接池配置及FullGC分析

本文主要讲述MySQL连接池配置不合适时&#xff0c;由于MySQL以虚引用的方式作为线程清理的后备手段&#xff0c;导致JVM年老代随时间缓慢增长&#xff0c;直至FullGC的问题。为了优化数据库连接池配置&#xff0c;使得JVM进行尽量少的FullGC导致服务故障&#xff0c;本文提供了…