原型是一个JSON格式的类,这个类包含一些关于文档的类型、属性等的信息。
如果需要,他也可以存储一些验证信息和默认值。他还可以包含一些业务逻辑以及其他重要的信息。
换句话说,原型可以作为文档的蓝图。模型创建的时候需要原型(即:原型被发布为模型)
所以在我们使用模型的属性前,需要先定义他们的原型,例如,book原型中定义了字符串类型的name属性。
var bookSchema = mongoose.Schema({
name: String
})
注:Mongoose会忽略那些没有在模型的原型中定义的属性。
一、Mongoose原型支持的数据类型
1、String:标准的JavaScript/Node.js的字符串类型(一个字符的序列)
2、Number:标准的JavaScript/Node.js的数字类型,大至253(64位);更大的数字用mongoose-long(Git)
3、Boolean:标准的JavaScript/Node.js的布尔类型–真或假
4、Buffer:Node.js的二进制类型(图像、PDF、档案等)
5、Date:ISO的标准格式化日期类型,例如 2015-11-24T23:03:28.009Z
6、Array:标准的JavaScript/Node.js数组类型
7、Schema.Types.ObjectId:MongoDB中一个典型的24个字符,12字节的十六进制的数字字符串(例如:52dafa354bd71b30fa12c441)
8、Schema.Types.Mixed:任何类型的数据(即:灵活的类型)
注:Mongoose并不理会混合型对象的更改,所以在保存对象之前调用markModified()方法来确保混合部分的更改是连续的。
如果在insert或者save方法中忽略ObjectId,则会自动增加为一个基础的_id键,_id键可以用来对文档按时间顺序排序。
可以用过Schema.Types或者mongoose.Schema.Types来调取使用(例如:Schema.Types.Mixed)
我们可以非常灵活地定义文档原型,例如:
var ObjectId=mongoose.Schema.Types.ObjectId,
Mixed = mongoose.Schema.Types.Mixed;
var bookSchema = mongoose.Schema({
name: String,
created_at: Date,
updated_at: {type: Date, default: Date.now},
published: Boolean,
authorId: {type: ObjectId, required: true},
description: {type: String, default: null},
active: {type: Boolean, default: false},
keywords: {type: [String], default: []},
description: {body: String, image: Buffer},
version: {type: Number, default: function(){return 1;}},
notes: Mixed,
contributors: [ObjectId]
});
也可以创建和使用自定义的类型,如mongoose-types,其中涵盖了使用广泛的e-mail类型和URL类型的规则。
Mongoose的原型是可以自定义插件的,这意味着,通过创建插件,可以将某些功能扩展至当前应用的所有原型中。
为了更好地组织和复用代码,在原型中,我们可以创建静态方法和实例方法,开发插件,以及定义钩子等。
小贴士:在Node.js中进行验证,可以考虑使用validator.js和express-validator模块。