mongodb

数据库的概念

在计算机出现以前,那个时候人们都是通过纸质文件来保存数据。这种保存方式肯定是有很多缺点的。

例如:

  1. 纸质文件容易丢失和损坏
  2. 占用空间大
  3. 浪费资源(浪费纸张,破坏环境)
  4. 查找数据困难

后面,计算机出现了,人们选择使用计算机来保存数据。那个时候最常见的是使用word和excel来保存数据。

这种保存方式同样存在缺点:

  1. 易丢失(不小心删除了)
  2. 查询不便
  3. 如果是很大的excel,打开都非常费力,而且极易被损坏

为了解决上述的问题,数据库就出现了。

数据库,英文叫做Database,简称DB。是按照数据结构组织,存储和管理数据的仓库。

数据库的特点:

  1. 数据是结构化
  2. 数据可以实现共享
  3. 数据的独立性高
  4. 数据可以统一管理和控制

数据库的分类

数据库可以分为层次数据库网络数据库关系数据库。现在更多的关心的是一个数据库是关系型还是非关系型

所谓关系型,就是指数据是存储在一张一张的表格里面。而每一张表之间又产生了相应的关系。

什么是数据库系统?

很多初学者以为数据库就是数据库系统。但是,实际上数据库系统的范围要比数据库的范围要广。

数据库系统可以包含硬件和软件。软件里面有可以分为3类:(1)数据库 (2)数据库管理系统(3)数据库应用程序

1. 数据库

存储数据的容器。

2. 数据库管理系统

所谓数据库管理系统,其实就是各个公司针对数据库管理所推出的产品。常见的数据库管理系统如下:
Oracle 数据库管理系统(关系型)
该数据库管理系统是由甲骨文公司开发的,在数据库领域一直处于领先的地位。Oracle在全球的使用最为广泛。
在这里插入图片描述
Oracle有一个特点,就是非常的昂贵。

SQL Server数据库管理系统(关系型)

该数据库管理系统由微软开发,广泛用于电子商务、银行、保险、电力等行业。该数据库的系统界面友好、易于操作。但是只能在windows系统下面运行。

在这里插入图片描述
DB 2 数据库管理系统(关系型)
是由IBM公司推出的数据库管理系统。
在这里插入图片描述
mySQL(关系型)
在这里插入图片描述
PostgreSQL 数据库管理系统(对象关系型数据库)
在这里插入图片描述
mongoDB(非关系型数据库)
由10ten公司开发的非关系型数据库,但是这种数据库被誉为最像关系型的非关系型数据库。
在这里插入图片描述

3数据库应用程序

虽然已经有了数据库管理系统,但是无法满足用户对数据库的管理,因为纯命令的方式来操作数据库是不太方便的。

这个时候就需要数据库应用程序来和数据库进行通信。数据库应用程序往往都是以图形界面的方式。

常见的数据库应用程序
Navicat:
在这里插入图片描述
SQLyog
在这里插入图片描述
Robo3T
在这里插入图片描述

SQL

SQL是一门语言,英语全称Structured Query Language,翻译成中文就是“结构化查询语言”。该语言是由IBM在1975-1979年之间开发出来。在80年代被美国国家标准学会定义成关系型数据库查询的标准语言。

select * from stu;

换句话说,只要是关系型数据库,都可以用SQL来操作数据。SQL从结构上去划分的话,可以分为4大类:

  • 数据定义语言(例如:create、alter 等语句)
  • 数据操作语言(例如:insert、update、delete 等语句)
  • 数据查询语言(例如:select 语句)
  • 数据控制语言(例如:commit、rollback 等语句)

NoSQL 简介

随着互联网Web2.0网站的兴起,传统的SQL(关系型)数据库在应付Web2.0网站的时候,就有点显得力不从心了。

1. 不够灵活、扩展困难
在SQL数据库中,都是通过表来对数据进行存储。一张信息表一般都有固定的字段,这样使得Web应用在数据做横向的扩展的时候很困难。

2. 过于笨重、性能低下
与一些功能不足的NoSQL类型数据库相比,SQL数据库有很多特性反而没有用武之地。比如,在很多场景下,针对及时存取、事务等操作并没有特别的要求。所以说这些额外的特性反而消耗着SQL数据库的性能。

NoSQL,英语全称Not only SQL,翻译成中文“不仅仅是SQL”
但是实际上,现在绝大多数的NoSQL数据库已经完全放弃了对SQL语言的支持。

NoSQL的优点

  • 高可扩展性
  • 分布式计算
  • 低成本
  • 架构灵活、半结构化数据
  • 没有复杂的关系

NoSQL的缺点

  • 没有标准化

NoSQL数据库的分类

1. 键值存储数据库

这一类的数据库主要会使用到一个哈希表,通过哈希表以键值的形式来存储。
常见的这一类数据库有 Tokyo Cabinet、Redis、OracleBDB
在这里插入图片描述
2. 列存储数据库

通过列的形式来存储数据。常见的有Cassandra、HBase、Riak
在这里插入图片描述
3. 文档型数据库

和第一种键值类似,只不过用对象的形式来存储数据。这一类常见的数据库有CouchDB、MongoDB
在这里插入图片描述
4. 图形数据库

这一类数据库就是以图形结构的形式来存储数据。这一类型的数据库有Neo4J、Infogrid、InfiniteGraph
在这里插入图片描述

MongoDB

在文档类型存储的NoSQL中,MongoDB为佼佼者。有人设置建议将LAMP中的M替换为MongoDB

安装MongoDB方法(参考菜鸟教程)

使用MongoDB时首先需要启动MongoDB服务器,启动之后该服务器默认监听27017端口,接下来就可以启动客户端进行连接。

如果要退出MongoDB,首先切换到admin主要数据库,使用db.shutdownServer()来关闭数据库服务器。(如果是Windows用户,直接点击右上角叉叉即可)

常用命令

  1. 查看所有的数据库 show dbs
    在这里插入图片描述
  2. 创建数据库
    use 数据库名
    该命令即是创建也是切换。但是注意的是,刚创建好的数据库,如果里面没有数据,使用show dbs 是查看不到的。
  3. 查看当前使用的数据库
    db

数据库相关操作

创建数据库

use 数据库名

本意是切换数据库,如果该数据库不存在,则会创建。但是创建后的空数据库使用show dbs 不会显示。至少要往数据库里面添加一条数据才会显示。

删除数据库:db.dropDatabase()
调用该方法后,会删除当前所使用的数据库。
在这里插入图片描述

集合相关操作

创建集合db.createCollection(name, options)
name:要创建的集合的名字
options:可选参数,详细见下表
在这里插入图片描述
如果要查询当前的数据库有哪些集合,可以通过show collections 或者 show tables命令

操作示例:
在这里插入图片描述
但是,一般来讲不需要显式的来创建集合。当我们往一个不存在的集合里面插入数据的时候,会自动生成一个新的集合。
在这里插入图片描述
删除集合:db.集合名.drop()
在这里插入图片描述

文档相关操作

文档相关操作就包含了增删改查;

插入文档
通过命令insert或者save命令就可以插入文档,在mongodb3.2版本之后,还提供了insertOne 以及 insertMany命令来控制插入一条或者多条
在这里插入图片描述
更新文档
在mongodb中,使用update命令来更新文档,语法如下:
在这里插入图片描述
操作示例如下:
在这里插入图片描述
如果要修改多条文档,可以将multi设置为true
在这里插入图片描述
删除文档
以前mongodb使用remove来进行文档的删除。但是现在不推荐使用remove方法来删除。因为使用该方法来删除数据,并不会释放空间,也就是说,删除完毕之后,还需要使用db.repairDatabase()来回收磁盘空间。

现在官方推荐使用deleteOne()或者deleteMany()方法来进行文档的删除。
deleteOne使用示例:
在这里插入图片描述
deleteMany使用示例:
在这里插入图片描述
还可以使用db.集合名.deleteMany({}),代表删除该集合下的所有文档。

文档的查询
基本的查询db.集合名.find(),该命令会将所有的数据查询出来
在这里插入图片描述
如果想要在查询时使用更加易读的方式来显示数据,可以添加上pretty方法。
在这里插入图片描述
条件查询

mongodb同样提供了条件查询。
在这里插入图片描述
实际操作示例:
查询年龄为18岁的
在这里插入图片描述
查询年龄大于等于18岁的
在这里插入图片描述
查询姓名不为keke的人
在这里插入图片描述
AND条件查询

mongodb里面可以往find方法中传入多个键值对,每个键值对以逗号隔开。
语法:db.集合名.find({key1:value1, key2:value2})
在这里插入图片描述
上面的语句类似于SQL里面的select * from stu where age>=18 and gender=‘male’

OR条件查询

mongodb中or条件使用关键字KaTeX parse error: Expected '}', got 'EOF' at end of input: …为:db.集合名.find({or:[{},{},…]})
在这里插入图片描述
查询条件的排序

在mongodb中,排序使用sort()方法。里面传入一个key(key对应的是具体的字段),key对应的值为1或者-1,如果是1,就是升序,如果是-1,那就是降序。
在这里插入图片描述
如果遇到第一个字段的排序相同,想要指定第二个字段的排序规则,方法很简单,继续传入key即可。
在这里插入图片描述
查询结果的限制

有些时候,我们不需要一次性查询出所有的符合条件的文档,这个时候就需要对文档进行一个分批的显示,这个时候就需要一个限制。
在mongodb数据库中,使用limit方法,该方法接收一个参数,该参数就是要读取的条数。
在这里插入图片描述
该方法一般会和skip()方法配合着使用。该方法表示跳过指定数量的数据
在这里插入图片描述
这两个方法多用于制作分页的时候。

模糊查询

mongodb中的模糊查询使用正则表达式即可
在这里插入图片描述

数据库的导入导出以及备份

数据库的导入导出

mongodb中支持将数据库导出为json或者CSV格式
语法:mongoexport -d 数据库名 -c 集合名 -o file --type json/csv -f filed

通过mongoimport就可以导入数据。具体的语法如下:
语法:mongoimport -d 数据库名 -c 集合名 --file filename --headerline --type json/csv fileld

数据库的备份和导入数据库

数据库的备份也是使用频率相当高的一个操作。

语法:mongodump -h dbhost -d dbname -o dbdirectory

数据库的恢复

语法:mongorestore -h dbhost -d dbname --dir dbdirectory

Nodejs操作mongodb数据库

nodejs连接mongodb数据库
安装mongodb模块:npm i mongodb

(1)通过连接字符串进行连接

这种连接方式非常简单,就是将数据库服务器以及端口等信息书写成一个字符串,然后传入connect方法即可。
在这里插入图片描述
在上面的连接方式中,会出现警告,提醒我们需要写入第二个useUnifiedTopology 参数,将其设置为true。设置方法如下:
在这里插入图片描述
(2)通过client对象来进行连接

这种连接方式将数据库服务器以及端口信息创建成一个对象,然后通过调用该对象的connect方法来进行连接
在这里插入图片描述
nodejs操作mongodb数据库

(1)创建集合

使用createCollection方法即可创建集合。
在这里插入图片描述
效果:
在这里插入图片描述
(2)删除集合

删除集合首先使用collection方法定位到具体的集合,然后使用drop方法进行删除。
在这里插入图片描述
(3)插入数据

可以使用insertOne或者insertMany来插入数据
在这里插入图片描述
效果:
在这里插入图片描述
(4)删除数据

删除数据对应饿方法也是两个,deleteOne和deleteMany
在这里插入图片描述
效果:
在这里插入图片描述
(5)更新数据
更新数据同样存在updateOne和updateMany两个方法。具体使用示例如下:
在这里插入图片描述
效果:
在这里插入图片描述
(6)查询数据

nodejs连接了mongodb之后,同样是使用find方法来查询数据

实际操作示例:
在这里插入图片描述
如果是条件查询,就在find方法中插入查询条件即可。

具体操作示例如下:
在这里插入图片描述
(7)查询结果排序

同样是使用sort方法来进行排序

具体操作如下:
在这里插入图片描述
(8)查询结果限制

同样是通过limit方法来对查询结果进行限制,配合skip方法来经常做分页的效果。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值