第7章-使用ORM类库Mongoose提升你的Node.js数据-7.2.Mongoose的原型

原型是一个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模块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值