Javascript 有没有办法定义';必需的';模式中有条件的键?
有没有办法在mongoose模式中有条件地设置“required”字段 例如:Javascript 有没有办法定义';必需的';模式中有条件的键?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,有没有办法在mongoose模式中有条件地设置“required”字段 例如: if x==true, y's required=true. else y's required=false 当然可以,使用mongoose的中间件。如果您需要某种形式的自定义验证,那么您可以将其连接到可用的挂钩中。一般的验证是在“预保存”时进行的,因此有一个放置钩子的好地方 作为一个完整的例子: var async = require('async'), mongoose = require('mong
if x==true, y's required=true. else y's required=false
当然可以,使用mongoose的中间件。如果您需要某种形式的自定义验证,那么您可以将其连接到可用的挂钩中。一般的验证是在“预保存”时进行的,因此有一个放置钩子的好地方 作为一个完整的例子:
var async = require('async'),
mongoose = require('mongoose'),
Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/test');
var testSchema = new Schema({
x: Number,
y: Number
});
testSchema.pre('save', function(next) {
if ( this.x && !this.y ) {
return next(new Error("y is required when x is set"));
}
next();
});
var Test = mongoose.model("Test", testSchema, "test");
async.series(
[
function(callback) {
var test = new Test({ y: 1 });
test.save(function(err,test) {
if (err) {
console.log( err );
} else {
console.log("test1: ok");
}
console.log( "y only expected to work");
callback();
});
},
function(callback) {
var test = new Test({ x: 1 });
test.save(function(err,test) {
if (err) {
console.log( err );
} else {
console.log("test2: ok");
}
console.log("x only expected to fail");
callback();
});
},
function(callback) {
var test = new Test({ x: 1, y: 1});
test.save(function(err,test) {
if (err) {
console.log( err );
} else {
console.log("test3: ok");
}
console.log("x and y is fine");
callback();
});
}
]
);
因此,放置在模式定义上的钩子可以检查传入的字段的内容,并确定这些字段是否符合您定义的规则。在这种情况下,当定义“x”时,您希望“y”的值始终存在。这意味着“y”本身是好的,“x”和“y”一起满足规则,但是“y”本身没有“x”将产生错误
有关更多详细信息以及实际验证字段给定值的信息,请参见文档中的