当前位置: 首页 > news >正文

MongoDB(一)

视频链接:https://www.bilibili.com/video/BV18s411E78K/?spm_id_from=333.337.search-card.all.click&vd_source=9545770e4a2968c05878ffac8589ec6c
视频选集:P1— P13

文章目录

  • 1.数据库简介
  • 2.MongoDB简介
  • 3.将MongoDB设置为系统服务
  • 4.MongoDB的基本操作
  • 5.安装图形化工具
  • 6.插入文档
  • 7.查询文档
  • 8.修改文档
    • 8.1 update()
    • 8.2 updateMany()
    • 8.3 updateOne()
    • 8.4 replaceOne()
  • 9.删除文档
  • 10.练习1
  • 11.练习2
  • 12.文档间的关系
    • 12.1 一对一
    • 12.2 一对多/多对一
    • 12.3 多对多
  • 13.练习3

1.数据库简介

  • 数据库是按照数据结构来组织、存储和管理数据的仓库。
  • 我们的程序都是在内存中运行的,一旦程序运行结东或者计算机断电,程序运行中的数据都会丢失。
  • 所以我们就需要将一些程序运行的数据持久化到硬盘之中,以确保数据的安全性。而数据库就是数据持久化的最佳选择。·
  • 说白了,数据库就是存储数据的仓库。

数据库分类:

  • 关系型数据库(RDBMS)
    MySQL、Oracle、DB2、SQL Server …
    关系数据库中全都是表
  • 非关系型数据库(NoSQL not only SQL)
    MongoDB、Redis
    键值对数据库
    文档数据库MongoDB

2.MongoDB简介

  • MongoDB是为快速开发互联网Web应用而设计的数据库系统。
  • MongoDB的设计目标是极简、灵活、作为Web应用栈的一部分。
  • MongoDB的数据模型是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库中存的是各种各样的JSON。(BSON )

三个概念:

  • 数据库( database ):数据库是一个仓库,在仓库中可以存放集合。
  • 集合( collection ):集合类似于数组,在集合中可以存放文档。
  • 文档(document ):文档数据库中的最小单位,我们存储和操作的内容都是文档。

  • 下载地址: https://www.mongodb.org/dI/win32/
  • MongoDB的版本偶数版本(比如:3.2 3.4 3.6)为稳定版,奇数版本为开发版。
  • MongoDB对于32位系统支持不佳,所以3.2版本以后没有再对32位系统的支持。

安装步骤:
在这里插入图片描述


数据库(database)

  1. 数据库的服务器
    服务器用来保存数据-
    -mongod用来启动服务器
  2. 数据库的客户端
    客户端用来操作服务器,对数据进行增删改查的操作
    -mongo用来启动客户端

3.将MongoDB设置为系统服务

将MongoDB设置为系统服务,可以自动在后台启动, 不需要每次都手动启动

在这里插入图片描述

4.MongoDB的基本操作

  • 数据库( database ):数据库是一个仓库,在仓库中可以存放集合。
  • 集合( collection ):集合类似于数组,在集合中可以存放文档。
  • 文档(document ):文档数据库中的最小单位,我们存储和操作的内容都是文档。

注意:在MongoDB中,数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合

在这里插入图片描述
基本指令:

  • show dbs(或者show databases)-显示当前的所有数据库
  • use 数据库名 -进入到指定的数据库中db
  • db 表示的是当前所处的数据库
  • show collections -显示数据库中所有的集合

数据库的CRUD(增删改查)的操作:
在这里插入图片描述

5.安装图形化工具

在这里插入图片描述
在这里插入图片描述

6.插入文档

向集合中插入一个文档:

在这里插入图片描述

向集合中插入多个文档:

在这里插入图片描述
注意:当我们向集合中插入文裆时,如果没有给文档指定_id属性,则数据库会自动为文档添加_id,该属性用来作为文档的唯一标识
在这里插入图片描述
id也可以自我指定:【如果我们指定了数据库就不会在添加了,如果自己指定_id也必须确保它的唯一性】

在这里插入图片描述

db.collection.insertone ():插入一个文档对象
db.collection.insertMany ():插入多个文档对象
这两个方法是上面db.collection.insert ()的拆分,只不过一个传入值为单个,一个传入值为数组

7.查询文档

find():查询集合中所有符合条件的文档【返回的是一个数组】
在这里插入图片描述
在这里插入图片描述
按单个条件查询:

在这里插入图片描述
按多个条件查询:

在这里插入图片描述
满足条件的第一个:
findOne():返回的是一个文档对象

在这里插入图片描述
在这里插入图片描述
查询所有结果(文档)的数量:
在这里插入图片描述

8.修改文档

8.1 update()

update()默认情况下会使用新对象来替换旧的对象
在这里插入图片描述
$set 可以用来修改文档中的指定属性
在这里插入图片描述
在这里插入图片描述

$unset 可以用来删除文档的指定属性:
需求:删除沙和尚的地址
在这里插入图片描述

注意:update()默认只会修改一个

设置参数修改多个:
在这里插入图片描述

8.2 updateMany()

updateMany()可以修改多个
在这里插入图片描述
在这里插入图片描述

8.3 updateOne()

updateOne()只会修改一个

8.4 replaceOne()

替换一个文档

9.删除文档

  • db.collection.remove ():
    可以根据条件来删除文档,传递的条件的方式和find( )一样
    删除符合条件的所有的文档
    remove ({}):如果只传递一个空对象,作为参数,则会删除集合中的所有的文档【清空集合(性能略差)】
    【清空集合最好用db.集合名.drop()】
  • db.collection.deleteone ()
  • db.collection.deleteMany ( )
  • db.collection.drop():删除集合
  • db.dropDatabase():删除数据库

在这里插入图片描述
只删除一个:
如果remove()第二个参数传递一个true,则只会删除一个
在这里插入图片描述

注意:一般数据席中的数据都不会删除,所以制除的方法很少调用【一般会在数据中添加一个字段,来表示数据是否被删除】

10.练习1

1.进入my_test数据库
use my_test

2.向数据库user集合中插入一个文档
db.users.insert({
	username:"sunwukong"
});

3.查询user集合中的文档
db.users.find () ;

4.向数据库的user集合中插入一个文格
db.users.insert ({
	username:" zhubajie"
});

5.查询数据席user集合中的文档
db.users.find () ;

6.统计数据席user集合中的文档数量
db.users.find().count() ;

7.查询数据席user集合中username为sunwukong的文档
ab.users.find({username:"sunwukong"});

8.向数据席user集合中的username为 sunwukong的文档,添加一个address属性,属性值为 huaguoshan
db.users.update({username:"sunwukong" },{$set:{address:"huagjoshan"}}) ;

9.使用{username:"tangseng"} 替换username为zhubajie的文档
db.users.replaceone({username:"zhubajie"}, {username:"tangseng" });

10.删除username为sunwukong的文档的address属性
db.users.update ({username:"sunwukong"},{$unset:{address:1}});

11.向username为sunwukong的文档中,添加一个hobby:{cities:["beijing","shanghai","shenzhen"], movies: ["sanguo","hero"]}
///MongoDB的文档的属性值也可以是一个文档,当一个文档的属性值是一个文档时,我们称这个文档叫做内嵌文档
db.users.update ({username:"sunwukong"},{$set:{hobby:{cities:["beijing","shanghai","shenzhen"], movies: ["sanguo","hero"]}}});

12.向username为tangseng的文档中,添加一个hobby:{movies:[ "A Chinese Odyssey","King of comedy"]}
db.users.update({username:"tangseng" },{$set:{hobby:{movies:[ "A Chinese Odyssey","King of comedy"]}}})

13.查询喜欢电影的hero的文档
//MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过﹒的形式来匹配
//如栗要通过内嵌文档来对文档进行查询,此时属性名必须使用引号 双引号和单引号都行
db.users.find({"hobby.movies":"hero"}) ;

14.向tangseng中添加一个新的电影Interstellar
//$push 用于向数组中添加一个新的元素,无论是否重复还是会添加
//$addToSet向数组中添加一个新元素,如果数组中已经存在了该元素,则不会添加
db.users.update({username:"tangseng"),{$push:{"hobby.movies":"Interstellar"}});
db.users.update({username:"tangseng"),{$addToSet:{"hobby.movies":"Interstellar"}});

15.删除beijing的用户
db.users.remove({"hobby.cities":"beijing"});

16.删除user集合
db.users.remove({});
db.users.drop();

17.向numbers中插入20000条数据 
// 第一种方法: 7.2s
for(var i=1; i<=20000; i++){
	db.numbers.insert({num:i});
}

// 第二种方法: 0.4s
var arr =[ ];
for (var i=l; i<=20000 ; i++){
	arr.push({num:i});
}
db.numbers.insert(arr) ;

11.练习2

18.查询numbers中num为500的文档
db.numbers.find({num:500})
db.numbers.find({num:{$eq:500}});//一般不经常用,直接写就行

19.查询numbers中num大于5000的文档
db.numbers.find({num:{$gt:5000}});

20.查询numbersp中num小于30的文档
db.numbers.find({num:{$lt:30}});

21.查询numbers中num大于40小于50的文档
db.numbers.find({num:{$gt:40,$lt:50}});

22.查询numbers中num大于19996的文档
db.numbers.find({num:{$eq:19996}});

23.查看numbers集合中的前10条数据
db.numbers.find({num:{$lte:10}});//但是有局限性
//limit()设置显示数据的上限
db.numbers.find().limit(10);

//在开发时,绝对不会执行不常条件的查询,通常使用limit进行分页展示
db.numbers.find() ;

24.查看numbers集合中的第11条到20条数据
//skip()用于跳过指定数量的数据
//skip((页码一1)*每页显示的条数.limit(每页显示的条数);
//MongoDB会自动调整skip和 limit的位置,两个前后无所谓
db.numbers.find().skip(10).limit(10);

25.查看numbers集合中的第21条到30条数据
db.numbers.find().skip(20).limit(10);

12.文档间的关系

  • 一对一( one to one)
  • 一对多( one to many)/多对一(many to one)
  • 多对多(many to many)

12.1 一对一

夫妻(一个丈夫 对应 一个妻子)【在 MongoDB,可以通过内嵌文档的形式来体现出一对一的关系】

在这里插入图片描述

在这里插入图片描述

12.2 一对多/多对一

父母-孩子
用户-订单
文章-评论
【也可以通过内嵌文档来映射一对多的关系】
在这里插入图片描述
查找用户swl的订单:

在这里插入图片描述

12.3 多对多

分类-商品
老师-学生

在这里插入图片描述

在这里插入图片描述

13.练习3

先导入数据
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

26.将dept和emp集合导入到数据库中
27.查询工资小于2000的员工
db.emp.find({sal:{$lt:2000}});

28.查询工资在1000-2000之间的员工
db.emp.find({sal:{$lt:2000,$gt:1000}}) ;

29.查询工资小于1000或大于2500的员工
db.emp.find({$or:[{sal:{$lt:1000}},{sal:{$gt:2500}}]});

30.查询财务部的所有员工
//depno
var depno = db.dept.findone({dname:"财务部"}).deptno;
db.emp.find({depno:depno});

31.查询销售部的所有员工
var depno = db.dept.findone({dname:"销售部"}).deptno;
db.emp.find({depno:depno});

32.查询所有mgr为7698的所有员工
db.emp.find({mgr:7698});

33.为所有薪资低于1000的员工增加工资400元
db.emp.updateMany({sal:{$lte:1000}},{$inc:{sal:400}});


相关文章:

  • C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序
  • MySql主从同步
  • java基于springboot+Vue+nodejs的高校运动会报名管理系统 element
  • 单链表❀数据结构
  • Linux——孤儿进程|进程的优先级 用top命令去修改优先级 其他概念 环境变量 PATH 获取环境变量
  • Linux系统编程-网络基础(四)-协议03:数据包封装【以太网(Mac)帧:最大值1500字节称为以太网的MTU(最大传输单元),不包括帧报头长度】
  • 一次诡异的numpy数组越界访问
  • cmd炫技小方法
  • kafka搭建单机开发教程
  • 如果你需要用Python搞个二维码,那应该收藏这篇博客
  • Linux权限的认识
  • 【JavaScript】五个常用功能/案例:判断特定结尾字符串 | 获取指定字符串 | 颜色字符串转换 | 字符串转驼峰格式 | 简易购物车
  • Kotlin 字符串与空值判断
  • 【NLP开发】Python实现聊天机器人(ALICE)
  • 【题解】同济线代习题二 8.1
  • [数据结构]链表的实现在PHP中
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • ➹使用webpack配置多页面应用(MPA)
  • CentOS 7 防火墙操作
  • Docker: 容器互访的三种方式
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • SQLServer之创建数据库快照
  • Vue 动态创建 component
  • 第十八天-企业应用架构模式-基本模式
  • 汉诺塔算法
  • 记录一下第一次使用npm
  • 面试遇到的一些题
  • 我建了一个叫Hello World的项目
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​比特币大跌的 2 个原因
  • ​学习一下,什么是预包装食品?​
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #图像处理
  • (1)STL算法之遍历容器
  • (13):Silverlight 2 数据与通信之WebRequest
  • (3)nginx 配置(nginx.conf)
  • (8)STL算法之替换
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (篇九)MySQL常用内置函数
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .Net Core与存储过程(一)
  • .NET 解决重复提交问题
  • .NET 中的轻量级线程安全
  • @Bean, @Component, @Configuration简析
  • @NestedConfigurationProperty 注解用法
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解