MongoDB(一)

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

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}});


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值