是否可以使用 `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
}
});
正如您从预定义架构中看到的那样,我有两个字段 type
和 title
。第二个 (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"']
});
更新:我应该注意到验证器只是 运行 如果一个字段不是未定义的,唯一的例外是需要的。所以,这不是一个好的选择。
我有以下架构:
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
}
});
正如您从预定义架构中看到的那样,我有两个字段 type
和 title
。第二个 (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"']
});
更新:我应该注意到验证器只是 运行 如果一个字段不是未定义的,唯一的例外是需要的。所以,这不是一个好的选择。