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 |
*/