我的文档中有许多日期间隔类型的字段,例如
{
publishDate:
{
start: {type: Date, required: true},
end: {type: Date, required: true}
}
}
为了减少代码的重复并使其更易于维护,如何创建自定义 Mongoose 类型,例如DateInterval,包含两个字段:
- 开始
- 结尾
并包含确保两个字段都填写的验证器,并且开始在结束之前?
我的文档中有许多日期间隔类型的字段,例如
{
publishDate:
{
start: {type: Date, required: true},
end: {type: Date, required: true}
}
}
为了减少代码的重复并使其更易于维护,如何创建自定义 Mongoose 类型,例如DateInterval,包含两个字段:
并包含确保两个字段都填写的验证器,并且开始在结束之前?
您可以在 mongoose 中重用模式。
var DateIntervalSchema = new Schema({
start: {type: Date, required: true},
end: {type: Date, required: true}
});
var SomeSchema = new Schema({
publishDate: [DateIntervalSchema],
// ... etc
});
您还可以参考其他集合中的文档。
var SomeSchema = new Schema({
publishDate: {type: Schema.ObjectId, ref: 'DateInterval'}
});
//using populate
SomeModel.findOne({ someField: "value" })
.populate('publishDate') // <--
.exec(function (err, doc) {
if (err) ...
})
您需要开发自定义模式类型。已经有许多插件可以做到这一点,其中一个,对于长数字,可以在这里找到:https ://github.com/aheckmann/mongoose-long/blob/master/lib/index.js 。这是一个很好的基本示例。
然后,出于您的目的,您可以创建一个DateInterval
自定义模式,将其转换为 type Date
,然后使用 avalidator
来检查start
和end
- http://mongoosejs.com/docs/api.html#schematype_SchemaType-validate。