原型是一个JSON格式的类,这个类包含一些关于文档的类型、属性等的信息。 如果需要,他也可以存储一些验证信息和默认值。他还可以包含一些业务逻辑以及其他重要的信息。 换句话说,原型可以作为文档的蓝图。模型创建的时候需要原型(即:原型被发布为模型) 所以在我们使用模型的属性前,需要先定义他们的原型,例如,book原型中定义了字符串类型的name属性。
var bookSchema = mongoose.Schema({ name: String })注: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模块。