Lidar com Erros de Consulta e Validação
Erros também podem ocorrer quando você consulta dados ou quando os dados inseridos não estão em conformidade com regras predefinidas. Nesta etapa, você explorará um erro de sintaxe de consulta e um erro de validação de dados.
Primeiro, vamos ver o que acontece quando você usa um operador de consulta que não existe. Este é um erro de digitação comum.
db.users.find({ name: { $invalidOperator: "John" } });
O MongoDB retorna imediatamente um erro porque não reconhece $invalidOperator.
MongoServerError[BadValue]: unknown operator: $invalidOperator
Em seguida, vamos explorar um recurso mais poderoso: a validação de esquema (schema validation). Você pode definir regras que os documentos devem seguir para serem inseridos ou atualizados em uma coleção. Vamos criar uma nova coleção products com um validador que exige um name (string) e um price (number).
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"
}
}
}
}
});
Agora, tente inserir um documento que viola este esquema, fornecendo o price como uma string em vez de um número.
db.products.insertOne({ name: "Laptop", price: "1200" });
A operação falha com um MongoBulkWriteError. A mensagem Document failed validation declara claramente o motivo, impedindo que dados incorretos entrem em seu banco de dados.
MongoServerError: Document failed validation
...
Finalmente, insira um documento válido que esteja em conformidade com o esquema.
db.products.insertOne({ name: "Laptop", price: 1200 });
Esta operação é bem-sucedida porque o documento é válido.
{
"acknowledged": true,
"insertedId": ObjectId("...")
}
A validação de esquema é uma ferramenta poderosa para impor a consistência dos dados diretamente no banco de dados.