MongoDB — это база данных NoSQL, которая обеспечивает гибкость в структурировании данных. Однако наступает момент, когда вам необходимо обеспечить определенный уровень проверки целостности данных. MongoDB обеспечивает это через уровни и действия проверки схемы. В этой статье мы подробно рассмотрим, какие документы подлежат проверке, что произойдет, если проверка не пройдена, а также разницу между строгим и умеренным уровнями проверки.

Основы проверки схемы

Прежде чем углубиться в подробности, давайте быстро посмотрим, как определить правило проверки схемы. Предположим, у вас есть коллекция с именем students, и вы хотите, чтобы в каждом документе было поле name типа string:

db.createCollection("students", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["name"],
      properties: {
        name: {
          bsonType: "string",
          description: "Name must be a string"
        }
      }
    }
  }
});

Какие документы проходят проверку?

Строгая проверка

При строгой проверке все входящие записи (insert, update, replace) должны пройти проверку схемы.

Умеренная проверка

Умеренная проверка применяется только к документам, которые уже соответствуют правилам проверки. Новые или обновленные документы, не соответствующие критериям, все равно будут отклонены.

Что произойдет, если проверка не пройдена?

Если проверка не удалась, MongoDB отклонит операцию и вернет ошибку. База данных не будет обновлять или вставлять документ, пока он не пройдет правила проверки.

Строгая и умеренная проверка

Основное различие между строгой и умеренной проверкой заключается в том, как они обращаются с существующими документами, которые не соответствуют правилам проверки.

Строгая проверка

  • Применяется ко всем вставкам и обновлениям.
  • Существующие документы, не соответствующие критериям, не могут быть обновлены, если сначала они не исправлены.

Умеренная проверка

  • Применяется только к документам, которые уже соответствуют критериям проверки.
  • Существующие документы, не соответствующие критериям, все равно можно обновлять, если обновление не нарушает схему.

Чтобы установить или изменить уровень проверки и действие, вы можете использовать команду collMod:

db.runCommand({
  collMod: "students",
  validator: { /* new validator */ },
  validationLevel: "moderate"
});

Краткое содержание

Проверка схемы MongoDB — это мощная функция, помогающая поддерживать целостность данных. Два основных уровня проверки, strict и moderate, предлагают разные уровни жесткости в соответствии с потребностями вашего приложения. Всегда помните о конкретных требованиях вашего приложения при выборе уровня проверки.