1、NoSQL数据库:非关系型数据库。数据的组织形式不是二维表格。即Not Only SQL,不能使用SQL结构化语句操作数据,适合存储超大规模、数据长度不确定的数据,数据没有固定的格式,不需要前期进行任何的设置就可以兹有的横向扩展。
2、MongoDB的含义:
是用C++编写的,用于分布式系统的数据存储。
存储数据的格式是键值对形式 key:value
数据库:database(mysql中也是一样)
数据表:mongodb:collection(集合),myaql:table
行:mongodb:document(文档),mysql:row
3、MongoDB的数据类型:String、Integer、Boolean、Array、Timestamp(时间戳)
ObjectId:类似唯一主键,长度为12个字节,通常用于生成文档的_id值。
强调:在monodb中,每个文档都有一个id属性,若用户在创建文档是没有给出 _id,MongoDB会用ObjectId来为 _id生成一个值,
_id的值是唯一的,用来唯一标识一个文档(一条记录)在添加文档时必须要自己给一个_id值
4、MongoDB的基本操作
2、mongoose模块:
(1)是一个对象模型的工具,是对nodejs环境下操作mongoDB数据库进行了封装,可以将mongoDB数据库中的数据转换成javascript对象供用户使用。
(2)名词:
a、schema:它是以一种文件形式存储的数据库模型骨架,不具备对数据库操作的能力,仅仅只是数据库在程序片段中的一种表现,可以理解为表结构。实现一种映射。
b、model:有schema发布生成的模型,具有抽象属性和行为的数据库操作。
c、entity:由model创建的实体,它的操作也会影响数据库
(3)命名规范:驼峰命名
PersonSchema:Person对应的Schema,Person 的文本属性(表结构)
PersonModel:Person对应的模型。操作数据库
PersonEntity:Person对应的实体
Schema生成的Model,由Model生成Entity,Model和Entity都可以操作数据库,Model的可操作性更强
3、Mongoose模块的使用
(1)安装:npm install Mongoose
(2)创建数据库的连接文件:
(3)创建Schema,再由Schema创建Model
a、Schema:定义的是与集合定义的骨架,Schema中的属性对应的是MongoDB中集合的key
b、Model:是Schema的一个实例,用于操作mongodb集合中的文档。
关于模型名和数据中集合名称的对应关系
(1)数据库中没有集合:
mongoose.model('Book',BookSchema)==>在模型名后加s就是集合名(不区分大小写)==>books
mongoose.model('Book','BookSchema','book')==>第三个参数就是用户定义的集合名
(2)数据库中有集合:
mongoose.model('Book','BookSchema','数据库中已有的集合名')
4、mongoose的基本操作
(1)插入文档:save方法
a、先使用model创建一个Entity,Entity也就是一个实例
b、再使用Entity调用save方法
(2)删除文档:直接用Model调用
findByIdAndDelete:作用是根据文档的_id属性来删除
deleteOne:作用是根据给定的条件删除文档
(3)更新文档:findOneAndUpdate,用model直接调用
findOneAndUpdate(条件,更新语句,{},回调函数)第三个参数也可以不写
updateOne:
(4)查询:
find:查询所有
findById:按_id查询
findOne:多条件查询,找到满足条件的第一条记录
满足条件的所有记录
count:查询集合中的文档数
二、在接口中间件(自定义的接口文件)中使用Mongoose模块