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.rhkb.cn/news/122279.html

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

相关文章

企业架构LNMP学习笔记13

上线商城项目&#xff1a; 1&#xff09;上传项目文件到数据库&#xff1a; 入口文件位置的设计是为了让应用部署更安全&#xff0c;public目录为web可访问目录&#xff0c;其他的文件都可以放到非web访问目录下面。 nginx 默认访问index.html。没有index.html&#xff0c;就会…

宠物电商Chewy第二季度销售额28亿美元,同比增长14.3%

美国宠物电商Chewy公布2023年第二季度财报。报告显示&#xff0c;其Q2季度销售额同比增长14.3%至28亿美元&#xff0c;超出市场预期。 以下为Chewy期内业绩概要&#xff1a; 1.毛利率28.3%&#xff0c;同比增长20个基点 2.净利润有所收窄&#xff0c;同比下降15.2%至1890万美…

【深入解析spring cloud gateway】06 gateway源码简要分析

上一节做了一个很简单的示例&#xff0c;微服务通过注册到eureka上&#xff0c;然后网关通过服务发现访问到对应的微服务。本节将简单地对整个gateway请求转发过程做一个简单的分析。 一、核心流程 主要流程&#xff1a; Gateway Client向 Spring Cloud Gateway 发送请求请求…

客服部门都应该建立一个自有的在线FAQ系统

问答系统是目前应用最广泛的问答系统。这种问答系统的结构框架明了、实现简单、容易理解&#xff0c;非常适合作为问答系统入门学习时的观察对象。所以越来越多的企业需要建立一个自有的在线FAQ系统&#xff0c;这对对于客服部门来说是非常有益的。 企业需要搭建自己FAQ系统的理…

【Linux】Ubuntu20.04版本配置pytorch环境2023.09.05【教程】

【Linux】Ubuntu20.04版本配置pytorch环境2023.09.05【教程】 文章目录 【Linux】Ubuntu20.04版本配置pytorch环境2023.09.05【教程】一、安装Anaconda虚拟环境管理器二、创建虚拟环境并激活三、安装Pytorch四、测试pytorchReference 一、安装Anaconda虚拟环境管理器 首先进入…

LeetCode(力扣)216. 组合总和 IIIPython

LeetCode216. 组合总和 III 题目链接代码 题目链接 https://leetcode.cn/problems/combination-sum-iii/ 代码 class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:result[]self.backtracking(n, k, 0, 1, [], result)return resultdef back…

多个pdf怎么合并在一起?跟着我的步骤一起合并

多个pdf怎么合并在一起&#xff1f;利用PDF文档合并功能可以帮助您更有效地管理文件&#xff0c;将多个相关文件整合成一个文件&#xff0c;避免分散在多个文件中。此外&#xff0c;合并后的文件更便于共享和传输&#xff0c;因为只需共享一个文件而不是多个文件。虽然合并文件…

900. RLE 迭代器

900. RLE 迭代器 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a; 原题链接&#xff1a; 900. RLE 迭代器 https://leetcode.cn/problems/rle-iterator/description/ 完成情况&#xff1a; 解题思路&#xff1a; //int next(int n) 以这…

git: ‘lfs‘ is not a git command unclear

首先可以尝试 git lfs install 是否可以&#xff0c;不可以后就看这个连接&#xff1a;https://stackoverflow.com/questions/48734119/git-lfs-is-not-a-git-command-unclear。 我的是ubuntu&#xff0c;所以&#xff1a; git-lfs requires git version 1.8.3.1 or later. Yo…

webpack打包

文章目录 一、什么是webpack二、使用步骤1.创建一个新的文件夹,并将其初始化2.在当前目录下安装webpack以及webpack-cli3.配置webpack自定义命令,使之生效4.运行自定义命令,打包webpack5.打包成功之后会将内容打包到dist文件夹下6.配置webpack1)修改webpack打包入口和出口2)配置…

pip install mysqlclient报错

安装mysqlclient时报错 先查看安装的python版本 python -V 根据版本下载下载对应的 mysqlclient 文件 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclienthttps://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 我的是3.7版本的 就下载3.7版本&#xff0c;64位系…

自然语言处理(八):预训练BERT

来自Transformers的双向编码器表示&#xff08;BERT&#xff09; BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是一种预训练的自然语言处理模型&#xff0c;由Google于2018年提出。它是基于Transformer模型架构的深度双向&#xff0…

CSS中如何实现文字跑马灯效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 跑马灯⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋…

Cocos独立游戏开发框架中的日志模块:Bug无所遁形

引言 本系列是《8年主程手把手打造Cocos独立游戏开发框架》&#xff0c;欢迎大家关注分享收藏订阅。 在Cocos独立游戏开发框架中&#xff0c;一个强大的日志模块是不可或缺的组成部分。日志不仅仅是记录应用程序的运行状态&#xff0c;还可以用于故障排除、性能监测和安全审计…

Golang-GJSON 快速而简单的方法来从 json 文档获取值

GJSON 是一个 Go 包&#xff0c;它提供了一种快速而简单的方法来从 json 文档获取值。它具有单行搜索、点符号路径、迭代和解析 json 行等功能。 GJSON 也可用于Python和Rust 入门 安装中 要开始使用GJSON 请安装 Go 并运行 go get &#xff1a; $ go get -u github.com/ti…

分支创建查看切换

1、初始化git目录&#xff0c;创建文件并将其推送到本地库 git init echo "123" > hello.txt git add hello.txt git commit -m "first commit" hello.txt$ git init Initialized empty Git repository in D:/Git/git-demo/.git/ AdministratorDESKT…

Android之“写死”数据

何为“写死”&#xff0c;即写完之后除非手动修改&#xff0c;否像嘎了一样在那固定死了 在实际安卓开发中&#xff0c;这种写死的概念必不可少&#xff0c;如控件的id&#xff0c;某一常量&#xff0c;Kotlin中的Val 当然&#xff0c;有些需求可能也会要求我们去写死数据&am…

commet与websocket

commet与websocket Comet 前言 Comet是一种用于web的技术&#xff0c;能使服务器能实时地将更新的信息传送到客户端&#xff0c;而无须客户端发出请求&#xff0c;目前有两种实现方式&#xff0c;长轮询和iframe流。 实现方式 长轮询 长轮询是在打开一条连接以后保持&…

计算机竞赛 基于深度学习的人脸识别系统

前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸识别系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/…

【web开发】1、flask入门和html开发

文章目录 一、前端三剑客是什么&#xff1f;二、快速开发网站1.安装flask2.根目录下创建templates目录及web.py文件 三、HTML3.1常用标签3.2列表标签3.3表格标签3.4INPUT系列&#xff08;7个&#xff09;3.5下拉框3.6多行文本3.7案例&#xff1a;用户注册页面 一、前端三剑客是…