Gérer les erreurs de requête
Dans cette étape, vous allez apprendre à gérer diverses erreurs de requête dans MongoDB, à comprendre les pièges courants et à mettre en œuvre des stratégies robustes de gestion d'erreurs pour les requêtes de base de données.
Comprendre les erreurs de requête de MongoDB
Explorons différents types d'erreurs de requête et la manière de les gérer efficacement en utilisant le shell MongoDB (mongosh).
Tout d'abord, assurez-vous d'être connecté au shell MongoDB :
mongosh
Préparer des données d'exemple
Créez une collection d'exemple pour nos démonstrations d'erreurs de requête :
use querylab
db.products.insertMany([
{ name: "Ordinateur portable", price: 1000, category: "Électronique" },
{ name: "Téléphone intelligent", price: 500, category: "Électronique" },
{ name: "Casques", price: 200, category: "Accessoires" }
])
Types d'erreurs de requête
1. Syntaxe de requête invalide
Démontrons une erreur de syntaxe de requête courante :
// Opérateur de comparaison incorrect
db.products.find({ price: { $invalidOperator: 500 } })
Sortie exemple :
MongoError: opérateur de niveau supérieur inconnu : $invalidOperator
2. Requête sur un champ inexistant
Essayez de faire une requête sur un champ qui n'existe pas :
// Requête sur un champ qui n'existe pas
db.products.find({ nonexistentField: "valeur" })
Cela ne générera pas d'erreur mais renverra un ensemble de résultats vide.
3. Incongruence de type dans les requêtes
Démontrons les défis liés aux requêtes de type :
// Requête avec incongruence de type
db.products.find({ price: "500" }) // Chaîne au lieu de nombre
Gestion avancée des erreurs de requête
Créez un script Node.js pour démontrer une gestion robuste des erreurs de requête :
const { MongoClient } = require("mongodb");
async function handleQueryErrors() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);
try {
await client.connect();
const database = client.db("querylab");
const products = database.collection("products");
try {
// Requête sécurisée avec gestion d'erreurs
const query = { price: { $gt: 0 } };
const options = {
projection: { _id: 0, name: 1, price: 1 },
limit: 10
};
const cursor = products.find(query, options);
const results = await cursor.toArray();
if (results.length === 0) {
console.log("Aucun document correspondant trouvé");
} else {
console.log("Résultats de la requête :", results);
}
} catch (queryError) {
// Gestion d'erreur spécifique
if (queryError.name === "MongoError") {
console.error("Erreur de requête MongoDB :", queryError.message);
} else {
console.error("Erreur inattendue :", queryError);
}
}
} catch (connectionError) {
console.error("Erreur de connexion :", connectionError);
} finally {
await client.close();
}
}
handleQueryErrors();
Meilleures pratiques pour la gestion des erreurs de requête
- Toujours valider les entrées avant de faire une requête
- Utiliser des blocs try-catch pour la gestion d'erreurs
- Mettre en œuvre une vérification de type
- Utiliser une projection pour contrôler les champs renvoyés
- Ajouter une journalisation d'erreurs appropriée
- Gérer les ensembles de résultats vides de manière gracieuse