Валидация обязательных полей
В этом шаге мы будем продолжать работу по валидации данных, сосредоточившись на том, чтобы гарантировать, что обязательные поля всегда присутствуют в документах MongoDB.
Понимание обязательных полей
Обязательные поля - это важные части информации, которые должны присутствовать в каждом документе. В предыдущем шаге мы создали схему валидации с обязательными полями. Теперь мы исследуем, как обеспечить и проверить эти требования.
Продолжим работу в MongoDB shell:
mongosh
Переключимся на нашу существующую базу данных:
use dataValidationLab
Определение строгой валидации обязательных полей
Мы изменим нашу существующую коллекцию users, чтобы обеспечить строгую валидацию обязательных полей:
db.runCommand({
collMod: "users",
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "age", "email", "registrationDate"],
properties: {
name: {
bsonType: "string",
description: "Имя обязательно и должно быть строкой"
},
age: {
bsonType: "int",
minimum: 18,
maximum: 120,
description:
"Возраст обязателен и должен быть целым числом в диапазоне от 18 до 120"
},
email: {
bsonType: "string",
pattern: "^.+@.+$",
description:
"Email обязателен и должен быть действительным адресом электронной почты"
},
registrationDate: {
bsonType: "date",
description: "Дата регистрации обязательна и должна быть датой"
}
}
}
},
validationLevel: "strict"
});
Попытка вставить документы с отсутствующими полями
Попробуем вставить документы с отсутствующими обязательными полями:
// Это не пройдет из-за отсутствия registrationDate
db.users.insertOne({
name: "Bob Wilson",
age: NumberInt(35),
email: "[email protected]"
});
// Это также не пройдет из-за отсутствия обязательных полей
db.users.insertOne({
name: "Charlie Brown"
});
Корректная вставка документа
Вот, как вставить документ, который соответствует всем требованиям:
db.users.insertOne({
name: "Emma Thompson",
age: NumberInt(42),
email: "[email protected]",
registrationDate: new Date()
});
Проверка ошибок валидации
Чтобы понять, почему вставка не проходит, MongoDB предоставляет сообщения об ошибках валидации:
try {
db.users.insertOne({
name: "Incomplete User"
});
} catch (error) {
print("Validation Error:", error.message);
}
Это поможет вам точно понять, какие обязательные поля отсутствуют.