Есть ли способ условно установить обязательное поле в схеме мангуста? ,Есть ли способ условно определить «обязательные» ключи в схеме?
Пример:
if x==true, y's required=true. else y's required=false
Есть ли способ условно установить обязательное поле в схеме мангуста? ,Есть ли способ условно определить «обязательные» ключи в схеме?
Пример:
if x==true, y's required=true. else y's required=false
Конечно, вы можете, используя промежуточное программное обеспечение Mongoose в. Если вам нужна некоторая форма пользовательской проверки, вы можете просто подключить ее к доступным крючкам. Общая валидация имеет место «pre save», поэтому есть хорошее место, чтобы положить крючок.
Как полный пример:
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();
});
}
]
);
Таким образом, крюк, который был сделан на определении схемы может проверить содержимое полей, передаваемых в и определить, действительно ли те, соответствовать правилам, которые вы определили. В этом случае вы всегда ищете значение «y», когда будет определено «x». Это означает, что «y» само по себе прекрасно, а «x» и «y» вместе соответствуют правилу, но «y» само по себе без «x» приведет к ошибке.
См. middleware в документации, а также validation для фактической проверки значений, заданных для данного поля.