Mongo 月架构验证

Mongo month schema validation

我需要验证用户 select 2(FEB) 月份是否应该只输入 dayOfMonth <= 28

如何验证

我的模式如下所示

date: {
    months: {
        type: String,
        required: true,
        validate: [validatorMonths, 'allowed session values are * and 0 to 11']
    },
    dayOfMonth: {
        type: String,
        required: true,
        validate: [validatorDayOfMonth, 'allowed day of month values are * and 1 to 31']
    } }

function validatorDayOfMonth(v) {
    return ((v == '*') || (v >= 1 && v <= 31)); };

function validatorMonths(v) {
    return ((v == '*') || (v >= 0 && v <= 11)); };

您可以使用 Date 检查返回的日期是否等于提供的日期:

function validatorDayOfMonth(v) {
  // Obviously replace the year with the correct value to account for leap years.
  // Within a validation function `this` refers to the root document being validated.
  return ((v === '*') || new Date(2015, this.date.months, v).getDate() === v);
};

这是可行的,因为 Date 构造函数会自动将额外的 days/months 更正为适当的日期。

new Date(2015, 1, 29).getDate() // 1

或者您可以使用 Moment 做同样的事情(尽管这可能有点矫枉过正)。

我认为您需要利用 mongooose 中间件进行验证。它允许您挂钩一个事件,您可以调用预保存并访问整个模式 http://mongoosejs.com/docs/api.html#document_Document-validate

你可以做类似

doc.pre('save', function(next) {
    if(this.months === "2") {
        this.days <= 28 && this.days >= 1 ? next() : next("Error message");
    else {
        this.days <= 31 && this.days >= 1 ? next() : next("Error message");
}