Обработка ошибок запросов и валидации
Ошибки также могут возникать при выполнении запросов к данным или когда вставляемые данные не соответствуют предопределенным правилам. В этом шаге вы изучите ошибку синтаксиса запроса и ошибку валидации данных.
Сначала посмотрим, что произойдет при использовании несуществующего оператора запроса. Это распространенная опечатка.
db.users.find({ name: { $invalidOperator: "John" } });
MongoDB немедленно вернет ошибку, поскольку не распознает $invalidOperator.
MongoServerError[BadValue]: unknown operator: $invalidOperator
Далее изучим более мощную функцию: валидацию схемы. Вы можете определить правила, которым должны следовать документы при вставке или обновлении в коллекции. Создадим новую коллекцию products с валидатором, который требует наличия поля name (строка) и price (число).
db.createCollection("products", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "price"],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
price: {
bsonType: "number",
description: "must be a number and is required"
}
}
}
}
});
Теперь попытаемся вставить документ, который нарушает эту схему, предоставив price в виде строки вместо числа.
db.products.insertOne({ name: "Laptop", price: "1200" });
Операция завершится с ошибкой MongoBulkWriteError. Сообщение Document failed validation четко указывает причину, предотвращая попадание некорректных данных в вашу базу данных.
MongoServerError: Document failed validation
...
Наконец, вставим допустимый документ, соответствующий схеме.
db.products.insertOne({ name: "Laptop", price: 1200 });
Эта операция будет успешной, поскольку документ является допустимым.
{
"acknowledged": true,
"insertedId": ObjectId("...")
}
Валидация схемы — это мощный инструмент для обеспечения согласованности данных непосредственно в базе данных.