是否可以使用 `required: true` 子句验证?

Is it possible to use `required: true` validation by clause?

我有以下架构:

var Schema = new mongoose.Schema({});

Schema.add({
    type: {
       type: String
       , enum: ['one', 'two', 'three']
    }
});

Schema.add({
    title: {
       type: String
       //, required: true ned set by some conditional
    }
});

正如您从预定义架构中看到的那样,我有两个字段 typetitle。第二个 (title) 必须是 required: true 只有当 type(one | two) 并且必须是 false 如果类型是 three.

我怎么能用猫鼬做呢?

编辑:感谢您的回答。我还有一个相关的问题要在这里问:

如果不需要,我可以删除字段吗?假设类型 if three 但也提供了 title 字段。为了防止在这种情况下存储不必要的 title 如何删除它?

您可以尝试以下方法之一:

Schema.add({
    title: {
       type: String
       //, required: true ned set by some conditional
    }
});

Schema.title.required = true;

var sky = 'gray'

var titleRequired = sky === 'blue' ? true : false

Schema.add({
    title: {
       type: String,
       required: titleRequired
    }
});

您可以在 mongoose 中为 required 验证器分配一个函数。

Schema.add({
  title: String,
  required: function(value) {
    return ['one', 'two'].indexOf(this.type) >= 0;
  }
});

documentation 没有明确说明您可以将函数用作参数,但如果您单击 show code,您就会明白为什么这是可能的。

使用 validate 选项替代已接受的答案:

Schema.add({
  title: String,
  validate: [function(value) {
    // `this` is the mongoose document
    return ['one', 'two'].indexOf(this.type) >= 0;
  }, '{PATH} is required if type is either "one" or "two"']
});

更新:我应该注意到验证器只是 运行 如果一个字段不是未定义的,唯一的例外是需要的。所以,这不是一个好的选择。