Почему валидация пропускает поля которых нет в схеме?

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

При использовании валидации в MongoDB, можно определить схему для коллекции с помощью JSON-схемы, которая описывает ожидаемую структуру документа. Это позволяет в MongoDB добавить некоторые ограничения на поля и типы значений.

Однако, по умолчанию в MongoDB валидация не включена. Если вы включите валидацию и определите схему для коллекции, но не указали конкретное правило для проверки поля, то MongoDB будет пропускать поля, которых нет в схеме. Это происходит потому, что по умолчанию, MongoDB не выполняет строгую проверку на ограничения схемы.

Если вам необходимо строго проверять структуру документа, включите строгую проверку в опциях валидации. Например, вы можете использовать опцию "strict" со значением "true" в опции "validationAction" при создании схемы для коллекции:

db.createCollection("myCollection", {
   validator: {
      $jsonSchema: {
         strict: true,
         // Другие правила валидации
      }
   }
})

При использовании строгой проверки, MongoDB будет ругаться на документы, которые содержат поля, не указанные в схеме. Вы можете выбрать, как MongoDB будет реагировать на такие документы, установив соответствующее значение в опции "validationAction". Например, вы можете выбрать действие "error", чтобы MongoDB выбрасывала ошибку при вставке или обновлении документа с неправильной структурой:

db.createCollection("myCollection", {
   validator: {
      $jsonSchema: {
         strict: true,
         validationAction: "error",
         // Другие правила валидации
      }
   }
})

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