1.1 介绍
- Mongoose 是一个让我们可以通过Node来操作MongoDB数据库的一个模块;
- Mongoose 是一个对象文档模型(ODM)库,它是对Node原生的MongoDB模块进行了进一步的优化封装
- 大多数情况下,他被用来把结构化的模式应用到一个MongoDB集合,并提供了验证和类型转换等好处;
- 基于MongoDB驱动,通过关系型数据库的思想来实现非关系型数据库。
1.2 优势/好处
- 为文档创建模式结构(Schema),也可以说是约束;
- 对模型中的对象/文档进行验证;
- 数据可以通过类型装换装换为对象模型;
- 可以使用中间件来应用业务逻辑挂钩;
- 相比MongoDB驱动更容易。
1.3 基本概念
- Schema(模式对象)
—— 是一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力;
换句话来说,Schema对象定义约束了数据库中的文档结构;
- Model(文档的抽象类)
—— 由Schema发布生成的模型具有抽象性和对数据库的操作行为;
换句话来说,Model对象作为集合中的所有文档的表示,相当于MongoDB中的collection,它的每一个实例就是一个document文档;
- Document(文档)
——Document表示集合中的具体文档,相当于collection中的一个具体文档
关系:**Schema**生成**Model**,**Model**创造**Document**。
1.4 简单使用
前提:安装MongoDB,Nodejs
1.4.1 下载安装Mongoose
npm i mongoose —save
1.4.2 项目中引入mongoose
var mongoose = require(‘mongoose’)
1.4.3 连接MongoDB数据库
mongoose.connect(‘mongodb://usr/pwd@localhost:27017(默认端口可以省略)/dbname)
数据库连接状态
(1)connect()返回的是一个待定状态,在 mongoose 中还有一个属性叫 connection可以用来表示数据库的连接;
(2)通过监视该对象可以用来监听数据库的连接与断开
- 数据库连接成功事件
mongoose.connection.once(‘open’ , () => {})
- 数据库断开事件
mongoose.connection.once(‘close’ , () => {})
1.4.4 创建Schema(模式)对象
var stuSchema = new Schema({})
- 通过
Schema创建Model; **Model**代表的是数据库中的集合,通过**Model**才能对数据库进行操作。
1.4.5 映射
var stuModel = mongoose.model(‘student’,stuSchema)
参数:
(1)要映射的集合名
(2)创建的约束(Schema对象)
1.4.6 通过映射返回的值对数据库进行增、删、改、查
1.4.7 断开数据库连接(一般不使用)
mongoose.disconnect()
1.5 使用案例
var mongoose = require('mongoose')var Schema = mongoose.Schema;//连接数据库mongoose.connect('mongodb://localhost:27017/student',{useNewUrlParser: true})//监听数据库连接状态mongoose.connection.once('open',()=>{console.log('数据库连接成功……')})mongoose.connection.once('close',()=>{console.log('数据库断开……')})// 连接数据库之后要定义原型,原型是一个json格式的类,其支持的数据类型下一篇文章会讲到//创建Schema对象(约束)var stuSchema = new Schema({name: String,age: Number,gender:{type: String,default:'male'},addr: String})//将stuSchema映射到一个MongoDB collection并定义这个文档的构成var stuModle = mongoose.model('student',stuSchema)//向student数据库中插入数据stuModle.create({name:"小明",age:"20",addr:"天津"},(err,docs)=>{if(!err){console.log('插入成功'+docs)}})/** 控制台结果:* 数据库连接成功……* 插入成功{* gender: 'male',* _id: 6017a189372ece49089d79c7,* name: '小明',* age: 20,* addr: '天津',* __v: 0* }*//** 数据库结果:* | _id | gender | name | age | addr | __v |* | ------------------------ | ------ | ---- | ---- | ---- | ---- |* | 6017a189372ece49089d79c7 | male | 小明 | 20 | 天津 | 0 |*/
