MongoDB Academy · Leçon

Ajouter un validateur à une collection

Vous associerez un validateur JSON Schema avec createCollection et collMod afin d’imposer les champs obligatoires et les types de données.

Leçon 1 sur 413 étapes

Ajouter un validateur à une collection est une leçon MongoDB Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage MongoDB Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours MongoDB Academy comprend 4 leçons au total.

Pourquoi la validation de schéma est importante

MongoDB est flexible au niveau du schéma par défaut : tout document peut être inséré, quelle que soit sa structure. Bien que cela soit utile pendant le développement, les bases de données de production ont besoin de garde-fous pour empêcher les données mal formées. La fonctionnalité de validation de schéma de MongoDB vous permet d’associer un ensemble de règles de schéma JSON à une collection afin que seuls les documents correctement structurés puissent être insérés ou mis à jour, en détectant les problèmes de qualité des données au niveau de la base avant qu’ils ne se propagent.

JSON Schema comme langage de validation

MongoDB utilise la spécification standard du secteur JSON Schema (version 4) pour exprimer les règles de validation. Vous définissez un objet $jsonSchema qui indique quels champs sont obligatoires, quels types ils doivent avoir et quelles contraintes supplémentaires s’appliquent. Le même format est utilisé partout où JSON Schema intervient : dans les spécifications OpenAPI, les bibliothèques de formulaires et désormais les validateurs MongoDB.

Ajouter un validateur lors de la création d’une collection

Transmettez une option validator lors de l’appel à db.createCollection(). Le validateur contient un document $jsonSchema. L’exemple ci-dessous exige que chaque document users contienne un name (chaîne de caractères) et un email (chaîne de caractères), et autorise facultativement un age (entier).

db.createCollection('users', {
  validator: {
    $jsonSchema: {
      bsonType: 'object',
      required: ['name', 'email'],
      properties: {
        name:  { bsonType: 'string', description: 'must be a string and is required' },
        email: { bsonType: 'string', description: 'must be a string and is required' },
        age:   { bsonType: 'int',    minimum: 0, description: 'optional, must be a non-negative int' }
      }
    }
  }
});

Ajouter un validateur à une collection existante

Utilisez la commande collMod (modification de collection) pour associer ou mettre à jour un validateur sur une collection qui existe déjà et peut déjà contenir des données. Par défaut, cette opération ne valide pas les documents existants : elle s’applique uniquement aux écritures futures, sauf si vous modifiez également validationLevel.

db.runCommand({
  collMod: 'users',
  validator: {
    $jsonSchema: {
      bsonType: 'object',
      required: ['name', 'email'],
      properties: {
        name:  { bsonType: 'string' },
        email: { bsonType: 'string' }
      }
    }
  }
});

Que se passe-t-il lorsque la validation échoue

Par défaut, si un document ne respecte pas le validateur, MongoDB rejette l’écriture et génère une erreur : Document failed validation. L’erreur contient un champ details qui explique précisément quelle règle a été enfreinte, ce qui facilite le diagnostic et la correction du document concerné. L’insertion ou la mise à jour est entièrement annulée : aucune écriture partielle n’a lieu.

// This insert violates the validator — email is missing
try {
  db.users.insertOne({ name: 'Bob' });
} catch (err) {
  console.error(err.errInfo.details);
  // Output: required field 'email' is missing
}

Afficher le validateur actuel

Pour inspecter le validateur associé à une collection, utilisez db.getCollectionInfos() ou interrogez l’espace de noms system.js. Le document renvoyé contient la spécification complète du validateur sous options.validator, ce qui vous permet de consulter, copier ou comparer les validateurs entre différents environnements.

// List all collections and their options, including validators
const info = db.getCollectionInfos({ name: 'users' });
console.log(JSON.stringify(info[0].options.validator, null, 2));

Supprimer un validateur

Pour supprimer toute validation d’une collection, exécutez collMod avec un objet de validation vide. La collection revient ainsi à son état par défaut, sans schéma imposé. Vous pouvez effectuer cette opération temporairement lors d’une migration massive de données ou définitivement lorsque vous abandonnez la validation au profit de contrôles au niveau de l’application.

// Remove the validator entirely
db.runCommand({
  collMod: 'users',
  validator: {}
});

Validation avec Mongoose et MongoDB natif

Mongoose possède sa propre validation de schéma au niveau de l’ODM, qui s’exécute en JavaScript avant l’envoi des données à MongoDB. Toutefois, la validation Mongoose peut être contournée avec insertMany ou des appels directs au pilote. L’ajout d’un validateur JSON Schema au niveau de la base de données constitue un filet de sécurité supplémentaire qu’aucun client ne peut contourner, quel que soit le pilote ou le langage utilisé.

Valider des objets imbriqués

Les validateurs JSON Schema peuvent vérifier les sous-documents intégrés. Utilisez la clé properties pour définir des règles concernant les champs imbriqués, et indiquez que l’objet imbriqué lui-même est de type bsonType: 'object'. Vous pouvez ainsi valider chaque niveau d’un document hiérarchique.

db.createCollection('orders', {
  validator: {
    $jsonSchema: {
      bsonType: 'object',
      required: ['customerId', 'shippingAddress'],
      properties: {
        customerId: { bsonType: 'objectId' },
        shippingAddress: {
          bsonType: 'object',
          required: ['street', 'city'],
          properties: {
            street: { bsonType: 'string' },
            city:   { bsonType: 'string' }
          }
        }
      }
    }
  }
});

Valider les éléments d’un tableau

Pour vérifier qu’un champ de type tableau contient uniquement des documents présentant une structure donnée, utilisez items dans la définition de la propriété. Chaque élément du tableau sera validé par rapport au schéma items. Cette approche est utile pour imposer la structure des lignes intégrées, des balises ou des tableaux d’adresses.

db.createCollection('carts', {
  validator: {
    $jsonSchema: {
      bsonType: 'object',
      properties: {
        items: {
          bsonType: 'array',
          items: {
            bsonType: 'object',
            required: ['productId', 'qty'],
            properties: {
              productId: { bsonType: 'objectId' },
              qty: { bsonType: 'int', minimum: 1 }
            }
          }
        }
      }
    }
  }
});

Validation de schéma dans Atlas

MongoDB Atlas fournit une interface graphique permettant de créer et de modifier les validateurs de collections sans écrire de JSON brut. Dans l’onglet Schema de la collection, vous pouvez ajouter des propriétés, définir des types et marquer des champs comme obligatoires à l’aide d’un formulaire. Atlas affiche également un score de validation — le pourcentage de documents existants qui respectent le schéma actuel — afin de vous aider à mesurer la qualité des données avant d’activer une validation stricte.

Vérification rapide

Vérifiez votre compréhension des concepts de MongoDB et des bases de données NoSQL présentés dans cette leçon.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris que les validateurs JSON Schema sont associés via createCollection ou collMod, que les échecs de validation rejettent l’écriture et renvoient une erreur détaillée, et que les objets imbriqués et les tableaux peuvent également être validés dans le même document de schéma. Nous allons maintenant explorer en détail les contraintes type, required et enum.

Gratuit pour commencer

Apprends JavaScript avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
30
Leçons
120

Questions Fréquemment Posées

La leçon « Ajouter un validateur à une collection » est-elle gratuite ?

Oui — le texte complet de « Ajouter un validateur à une collection » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours MongoDB Academy, passe à CoddyKit PRO. Le cours MongoDB Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Ajouter un validateur à une collection » ?

Vous associerez un validateur JSON Schema avec createCollection et collMod afin d’imposer les champs obligatoires et les types de données. Tu pratiques MongoDB Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer MongoDB Academy ?

Aucune expérience préalable n'est requise. MongoDB Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Ajouter un validateur à une collection » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon MongoDB Academy ?

Oui. Chaque leçon MongoDB Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Ajouter un validateur à une collection
  2. Contraintes de type, d’obligation et d’énumération
  3. Niveaux et actions de validation
  4. Faire évoluer les schémas sans interruption de service
← Retour à MongoDB Academy