В этой статье блога мы рассмотрим различные методы обработки сценариев в MongoDB и Mongoose, когда значение поля не входит в набор предопределенных значений. Мы предоставим простые для понимания объяснения и примеры кода, которые помогут вам решить эту распространенную проблему в ваших приложениях MongoDB и Mongoose. Итак, приступим!
Метод 1. Проверка значений полей с помощью Enum
Первый метод предполагает использование функции enumв Mongoose для определения набора допустимых значений для поля. Давайте рассмотрим пример:
const userSchema = new mongoose.Schema({
role: {
type: String,
enum: ['admin', 'user', 'guest']
}
});
В этом примере поле roleограничено тремя допустимыми значениями: «администратор», «пользователь» и «гость». Если вы попытаетесь сохранить документ со значением вне этого набора, Mongoose выдаст ошибку проверки.
Метод 2: пользовательская проверка с использованием функции проверки
В некоторых случаях может потребоваться более сложная логика проверки. Mongoose позволяет вам определить пользовательскую функцию проверки для проверки значений полей. Вот пример:
const userSchema = new mongoose.Schema({
role: {
type: String,
validate: {
validator: function(value) {
return ['admin', 'user', 'guest'].includes(value);
},
message: 'Invalid role value'
}
}
});
В этом примере свойство validateпринимает объект с функцией validator, которая проверяет, входит ли значение поля в разрешенный набор. Если функция возвращает false, Mongoose выдаст ошибку проверки.
Метод 3: перехватчик предварительного сохранения для проверки.
Другой подход — использовать перехватчик предварительного сохранения для проверки значения поля перед сохранением документа. Вот пример:
userSchema.pre('save', function(next) {
if (!['admin', 'user', 'guest'].includes(this.role)) {
next(new Error('Invalid role value'));
} else {
next();
}
});
При использовании этого метода логика проверки выполняется перед сохранением документа. Если значение поля не входит в разрешенный набор, в функцию nextпередается ошибка, что приводит к сбою операции сохранения.
Метод 4: использование плагина Mongoose-Validator
Если вы предпочитаете более модульный подход, вы можете использовать плагин Mongoose-Validator. Этот плагин предоставляет дополнительные параметры проверки, включая поддержку проверки по набору разрешенных значений. Вот пример:
const mongooseValidator = require('mongoose-validator');
const userSchema = new mongoose.Schema({
role: {
type: String,
validate: [
mongooseValidator({
validator: 'isIn',
arguments: [['admin', 'user', 'guest']],
message: 'Invalid role value'
})
]
}
});
Используя плагин Mongoose-Validator, вы можете легко проверять значения полей на соответствие предопределенному набору.
В этой статье мы рассмотрели несколько методов обработки сценариев, когда значение поля не входит в набор значений в MongoDB и Mongoose. От использования enumи пользовательских валидаторов до предварительного сохранения хуков и внешних плагинов — теперь у вас есть целый ряд опций на выбор в зависимости от ваших конкретных потребностей.
Помните, что обеспечение целостности ваших данных имеет решающее значение, и эти методы предоставляют эффективные способы обеспечения соблюдения ограничений на значения полей. Реализуя эти методы, вы можете с уверенностью создавать надежные приложения MongoDB и Mongoose.