Освоение MongoDB и Mongoose: обработка значений полей, не входящих в набор

В этой статье блога мы рассмотрим различные методы обработки сценариев в 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.