1.SQL存在问题
- 类似于w3c提出的规范,由各个厂商实现SQL,但现实的方式大体一样但不完全一样,所以当你实现MySQL,在使用Oracle你可能还需要学点Oracle语法
- 标准化虽然好,可以减低学习成本,简化了学习成本,但限制了我们创新的机会,十几年前标准到现在不一定是一个先进的东西了,但定它已经标准了,想改也不好改了。标准化的好处:写一个网页各个浏览器都能用。
- 前期建表需要很长时间,会留几个空白项方便以后修改,设计出来基本不能改了,如果这个表需要使用很久的话,前期没设计好,改起来会很麻烦,所以关系型数据库开发起来是很慢的。
2.MongoDB - 文档型数据库
非关系型数据库(NO SQL) only SQL
- 极简、灵活:想存什么存什么,扩展的话只需要几行代码
- 虽然自由,但是需要我们自己约束自己,像SQL自己给你加了约束
MongoDB的数据模型是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库中存在的是各种各样的JSON(BSON)
3.三个概念
-
数据库(database)
数据库是一个仓库,在仓库中可以存放集合。 -
集合(collection)
集合类似于数组,在集合中可以存放文档。 -
文档(document)
文档数据库中的最小单位,我们存储和操作的内容是文档 。
4.Mongoose
开发中大部分时候我们都需要通过程序来完成对数据库的操作,而Mongoose就是一个让我们可以通过Node操作MongoDB的模块。
好处:
- 可以为文档创建一个模式结构(schema)
相当于约束;由于MongoDB没有约束,数据类型想放什么放什么,很容易插入错误数据,所以Mongose没有约束,但我们可以在mongose里进行约束(字段,数据类型) - 可以对模型中的对象、文档进行验证
- 数据可以通过类型转换,转换成为对象模型
- 可以使用中间件来应用业务逻辑挂钩
- 比Node原生的MongoDB驱动更容易
Mongoose 为我们提供了几个新对象:
- schema(模式对象)
schema对象定义约束了数据库中的文档结构 - Model
Model对象作为集合中的所有文档表示,相当于MongoDB数据中的集合collection。 - Document
Document表示集合中的具体文档,相当于集合中的一个具体文档。和集合中的文档一一对应,Document是Model的实例,通过Model查询到结果就是Document。
5.实现步骤
- 连接数据库
使用Mongoose必须安装Mongoose包
加载Mongoosenpm install mongoose
连接数据库const mongoose = require('mongoose')
在MongoDB对象中,有一个属性connection,该对象表示的就是数据库的连接状态,可以监听数据库的连接于断开。mongoose.connect('mondodb://地址')
- 创建模型
创建一个模型对象,这个模型对象与数据库中的users集合进行映射,然后用schema对模型进行约束 - 将文档结构发布为模型
mongoose.model方法就是用来将一个架构发布为model
返回值:模型构造函数 - 当我们有了模型构造函数之后,就可以使用这个构造函数对集合中的数据进行操作