原文

1.1 介绍

  • Mongoose 是一个让我们可以通过Node来操作MongoDB数据库的一个模块;
  • Mongoose 是一个对象文档模型(ODM)库,它是对Node原生的MongoDB模块进行了进一步的优化封装
  • 大多数情况下,他被用来把结构化的模式应用到一个MongoDB集合,并提供了验证和类型转换等好处;
  • 基于MongoDB驱动,通过关系型数据库的思想来实现非关系型数据库。

image.png

1.2 优势/好处

  1. 为文档创建模式结构(Schema),也可以说是约束
  2. 对模型中的对象/文档进行验证;
  3. 数据可以通过类型装换装换为对象模型;
  4. 可以使用中间件来应用业务逻辑挂钩;
  5. 相比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 使用案例

  1. var mongoose = require('mongoose')
  2. var Schema = mongoose.Schema;
  3. //连接数据库
  4. mongoose.connect('mongodb://localhost:27017/student',{
  5. useNewUrlParser: true
  6. })
  7. //监听数据库连接状态
  8. mongoose.connection.once('open',()=>{
  9. console.log('数据库连接成功……')
  10. })
  11. mongoose.connection.once('close',()=>{
  12. console.log('数据库断开……')
  13. })
  14. // 连接数据库之后要定义原型,原型是一个json格式的类,其支持的数据类型下一篇文章会讲到
  15. //创建Schema对象(约束)
  16. var stuSchema = new Schema({
  17. name: String,
  18. age: Number,
  19. gender:{
  20. type: String,
  21. default:'male'
  22. },
  23. addr: String
  24. })
  25. //将stuSchema映射到一个MongoDB collection并定义这个文档的构成
  26. var stuModle = mongoose.model('student',stuSchema)
  27. //向student数据库中插入数据
  28. stuModle.create({
  29. name:"小明",
  30. age:"20",
  31. addr:"天津"
  32. },(err,docs)=>{
  33. if(!err){
  34. console.log('插入成功'+docs)
  35. }
  36. })
  37. /*
  38. * 控制台结果:
  39. * 数据库连接成功……
  40. * 插入成功{
  41. * gender: 'male',
  42. * _id: 6017a189372ece49089d79c7,
  43. * name: '小明',
  44. * age: 20,
  45. * addr: '天津',
  46. * __v: 0
  47. * }
  48. */
  49. /*
  50. * 数据库结果:
  51. * | _id | gender | name | age | addr | __v |
  52. * | ------------------------ | ------ | ---- | ---- | ---- | ---- |
  53. * | 6017a189372ece49089d79c7 | male | 小明 | 20 | 天津 | 0 |
  54. */