Pourquoi valider ?
Sans garde-fou, rien n'empêche d'insérer une campagne sans zone, ou avec un statut écrit « ouvert » au lieu de « OUVERTE ». La validation pose des règles minimales vérifiées à chaque insertion/mise à jour, tout en laissant les champs non listés libres.
Déclarer un validateur avec $jsonSchema
À la création d'une collection, on fournit un validator décrit par $jsonSchema : champs requis et propriétés attendues.
db.createCollection("campagnes", { validator: { $jsonSchema: { bsonType: "object", required: ["zone", "statut", "dateLimite"], properties: { zone: { bsonType: "string" }, statut: { bsonType: "string" } } } } })
Types & contraintes
On précise le bsonType de chaque champ et des contraintes simples (min, max, longueur…).
properties: {
litres: { bsonType: "int", minimum: 500 },
prixLitre: { bsonType: "double" },
commandes: { bsonType: "array" }
}
"int" et "double" sont distincts en BSON (chapitre 16). Dans mongosh, un nombre écrit 1500 peut être un double ; utilise NumberInt(1500) si tu veux un entier.Restreindre à des valeurs autorisées (enum)
enum limite un champ à une liste de valeurs — parfait pour un statut.
statut: {
bsonType: "string",
enum: ["OUVERTE", "CLOTUREE", "LIVREE"]
}
Une insertion invalide est refusée
Ajouter un validateur à une collection existante
Sur une collection déjà créée, on utilise collMod.
db.runCommand({
collMod: "campagnes",
validator: { $jsonSchema: { /* ... */ } }
})
Niveau & action de validation
Deux réglages ajustent la sévérité :
- validationLevel :
strict(toutes les écritures) oumoderate(n'applique qu'aux documents déjà valides). - validationAction :
error(rejette) ouwarn(accepte mais journalise).
Pose un validateur sur campagnes : zone et statut requis, statut dans l'enum ["OUVERTE","CLOTUREE","LIVREE"], litres ≥ 500 sur les commandes. Tu obtiens le même filet de sécurité que la validation @Valid côté Spring — les deux se complètent (défense en profondeur, à relier au cours Cyber).
- La validation pose des règles minimales sans figer le document.
$jsonSchema:required,bsonType,enum, min/max.collModpour une collection existante.validationLevel/validationActionrèglent la sévérité.