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