Mongoose是nodejs的MongoDB Object Modeling Map简称ODM,它类似于关系型数据库ORM,用于抽象化mongodb数据表模型,以简化对数据库交互的代码,增强代码的可读性和可维护性

基于模型

模型是schema类的实例

//创建tankSchema类
var tankSchema = new mongoose.Schema({ name: 'string', size: 'string' }); 
//实例化tank模型
var Tank = mongoose.model('Tank', tankSchema); 

schema第二个参数可选项

autoIndex: bool - defaults to null (which means use the connection's autoIndex option)
自动索引即MongoDB ensureIndex command,默认false

bufferCommands: bool - defaults to true
自动重新连接,默认true

capped: bool - defaults to false
MongoDB固定集合,默认是False

collection: string - no default
集合的名称,没有默认

emitIndexErrors: bool - defaults to false.

id: bool - defaults to true

_id: bool - defaults to true

minimize: bool - controls document#toObject behavior when called manually - defaults to true

read: string 读取优先级别

safe: bool - defaults to true.
MongoDB在操作数据发生错误时,不是马上报告,在安全模式下则相反

shardKey: bool - defaults to null
MongoDB是分布式的,设置是否共享到其它主机

strict: bool - defaults to true
确保数据是经过模型才保存到数据库,默认true

toJSON - object - no default
toObject - object - no default
typeKey - string - defaults to 'type'

validateBeforeSave - bool - defaults to true
是否经过验证才保存

versionKey: string - defaults to "__v"

更多

schema类中的数据类型

  • String
  • Number
  • Boolean | Bool
  • Array
  • Buffer
  • Date
  • ObjectId | Oid
  • Mixed

ObjectId要通过new mongoose.Types.ObjectId获得

定义嵌套的键

var UserSchema = new Schema({
  name:'string'
  email: { 
           type: String, 
           set: toLower 
  }
})

在MongoDB中文档可以很大,层次也可以很深

构建索引

schema.index({ first: 1, last: -1 })

中间件

中间件(也可以叫钩子)是一个函数,他可以控制异步执行函数,中间件在schema类中指定,Mongoose 4.0有两种类型中间件:文档中间件和查询中间件

文档中间件支持追踪文档函数
  • init
  • validate
  • save
  • remove
查询中间件支持跟踪模型和查询函数
  • count
  • find
  • findOne
  • findOneAndRemove
  • findOneAndUpdate
  • update