Cours
Lorsque vous travaillez avec MongoDB, en particulier en tant que développeur issu d'une base de données relationnelle, l'une des premières choses que vous remarquerez est la flexibilité de la conception des schémas.
Les collections dans MongoDB n'ont pas besoin d'être explicitement créées à l'avance, mais il est parfois utile de les définir explicitement et de les configurer avec soin.
Dans cet article, nous verrons comment et quand vous pourriez vouloir créer une collection dans MongoDB, quelques options de configuration clés à prendre en compte, et quelques exemples de code en JS et C# (mon préféré).
Ne vous inquiétez pas, nous avons une grande parité de fonctionnalités entre les pilotes, de sorte qu'une grande partie de ce que vous voyez ici aujourd'hui sera possible dans <insérez la langue de votre choix>.
Si vous êtes novice en matière de bases de données NoSQL, envisagez de commencer par une Introduction à NoSQL.
Qu'est-ce qu'une collection MongoDB ?
Avant de voir comment créer des collections, examinons brièvement ce qu'est une collection.
Si vous venez d'un environnement SQL, vous avez peut-être l'habitude d'entendre parler de tableaux, de lignes et de colonnes. Dans MongoDB, les termes sont légèrement différents. Au lieu de tableaux, nous avons des collections, et au lieu de lignes, nous avons des documents avec des champs et non des colonnes.
L'une des grandes forces de MongoDB est son schéma dynamique. Cela signifie que vous n'avez pas besoin de créer une collection manuellement avant de l'utiliser. Si vous insérez un document dans une collection qui n'existe pas encore, MongoDB la créera automatiquement. Par exemple, si vous exécutez :
db.movies.insertOne({ title: "The Matrix", year: 1999 });
Il tentera d'insérer un document unique pour le film "The Matrix" dans la collection movies
. S'il existe déjà, le document sera ajouté à la collection. Si ce n'est pas le cas, la collection movies
sera créée avant que le nouveau document ne soit ajouté.
Vous pouvez également ajouter plusieurs documents à la fois en utilisant insertMany
au lieu de insertOne
.
Quand définir explicitement les collections MongoDB ?
Même si vous pouvez laisser MongoDB gérer la création des collections automatiquement, il y a de bonnes raisons de définir les collections à l'avance, en particulier dans les scénarios de production. La création explicite de collections vous donne la possibilité de.. :
- Configurez les collections plafonnées pour l'enregistrement ou la mise en cache.
- Mettez en place des règles de validation pour appliquer les contraintes dans vos schémas.
- Appliquer certains index par défaut comme le temps de vie (TTL). Ces index sur un champ de date supprimeront automatiquement les documents de votre collection en fonction d'un délai que vous aurez spécifié.
- Optimisez les charges de travail à forte intensité d'écriture en prédimensionnant les collections.
Voici comment créer une collectiondans le shell MongoDB:
db.createCollection("auditLogs", {
capped: true,
size: 10485760, // 10 MB
max: 1000
});
Ou avec une validation :
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["email", "createdAt"],
properties: {
email: {
bsonType: "string",
pattern: "^.+@.+$"
},
createdAt: {
bsonType: "date"
}
}
}
}
});
Bien que MongoDB prenne en charge un schéma flexible, il se peut que vous souhaitiez ajouter des règles de validation telles que des champs obligatoires ou la spécification de propriétés sur certains champs, comme les types de données ou le formatage des courriels, comme indiqué ci-dessus. C'est le cas si vous voulez vous assurer que vos documents respectent un schéma spécifique.
L'application des schémas vous semblera familière si vous avez une formation en SQL, et même si ce n'est pas le cas, il arrive que vos applications en production aient besoin de documents dont la forme est prévisible. La validation est donc excellente pour cela !
Créer des collections MongoDB avec le pilote C#
Dans une application C#, vous pouvez également créer explicitement des collections à l'aide du pilote MongoDB. Bien qu'elle ne soit pas nécessaire pour les opérations de base, c'est ici que vous pouvez définir des options avancées par programme.
var options = new CreateCollectionOptions
{
Capped = true,
MaxSize = 10485760, // 10 MB
MaxDocuments = 1000
};
await database.CreateCollectionAsync("auditLogs", options);
Pour ajouter un validateur :
var validator = new BsonDocument
{
{ "$jsonSchema", new BsonDocument
{
{ "bsonType", "object" },
{ "required", new BsonArray { "email", "createdAt" } },
{ "properties", new BsonDocument
{
{ "email", new BsonDocument
{
{ "bsonType", "string" },
{ "pattern", "^.+@.+$" }
}
},
{ "createdAt", new BsonDocument
{
{ "bsonType", "date" }
}
}
}
}
}
}
};
var collectionOptions = new CreateCollectionOptions<BsonDocument>
{
Validator = new BsonDocumentFilterDefinition<BsonDocument>(validator)
};
await database.CreateCollectionAsync("users", collectionOptions);
Pour les développeurs Python, le tutoriel Introduction à MongoDB et Python est une excellente ressource.
Principales options de configuration des collections à connaître
Lorsque vous créez des collections de manière explicite, voici quelques options que vous voudrez peut-être connaître :
capped
: crée une collection de taille fixesize
Taille maximale en octets d'une collection plafonnéemax
Nombre maximum de documents autorisés : nombre maximum de documents autorisésvalidator
: Objet JSON dans la syntaxe du schéma qui définit la validation du schémaexpireAfterSeconds
Index TTL : utilisé avec des index TTL pour gérer l'autodestruction des documents.
Vous pouvez également appliquer des index lors de la créationme ou peu de temps après. MongoDB ne crée pas automatiquement d'index à moins qu'ils ne soient nécessaires pour _id
.
Les index de MongoDB vous permettent d'améliorer les performances de vos champs les plus fréquemment accédés. Ils mettront ces valeurs en mémoire cache, ce qui signifie qu'il n'y aura pas d'appels au disque dur pour les récupérer, ce qui peut faire gagner beaucoup de temps et de performances lorsque vous accédez régulièrement à ces valeurs.
Meilleures pratiques pour définir les collections MongoDB
Voici quelques lignes directrices pour vous aider à décider quand définir explicitement les collections :
- Création implicite pour la validation rapide de concepts ou le développement local, ou lorsque l'utilisateur final est en mesure de générer le contenu de manière dynamique.
- Création explicite lorsque vous souhaitez appliquer une validation ou des paramètres d'indexation ou de performance.
Conclusion
MongoDB est connu pour la souplesse de son schéma, qui nous permet de structurer nos données de manière flexible, notamment en ce qui concerne la création et la gestion des collections. Si la création implicite est rapide et pratique, les définitions explicites des collections permettent d'accéder à des fonctionnalités puissantes telles que la validation des schémas, le plafonnement des comportements et l'optimisation des performances.
Comme toujours, MongoDB Atlas rend la gestion des collections encore plus facile grâce à des outils basés sur l'interface utilisateur, l'automatisation et des informations intégrées sur les performances. Et si vous travaillez en .NET, le pilote C# vous couvre avec des modèles fortement typés et des API fluides.
Lorsque vous envisagez les meilleures pratiques pour définir les collections MongoDB,il peut être utile de comprendre lesprincipes fondamentauxde conception des bases de données.
Bon codage ! Que vos collections soient rapides, valides et bien indexées !
Devenez ingénieur en données
FAQ
Quelle est la différence entre la création implicite et explicite de collections dans MongoDB ?
- Création implicite : MongoDB crée automatiquement une collection lorsque vous insérez un document dans une collection inexistante. Ceci est utile pour un prototypage ou un développement rapide.
- Création explicite : Vous définissez manuellement une collection avant de l'utiliser, souvent pour configurer des paramètres avancés tels que les règles de validation, la taille maximale ou l'indexation. Ceci est recommandé pour les environnements de production.
Quand dois-je créer explicitement une collection au lieu de laisser MongoDB la créer automatiquement ?
Vous devez créer explicitement une collection dans les cas suivants : validation des schémas, collections plafonnées, optimisation des performances et index par défaut.
Comment renforcer un schéma dans MongoDB s'il n'y a pas de schéma ?
MongoDB prend en charge la validation du schéma JSON, qui vous permet de définir des règles pour la structure du document.
Qu'est-ce qu'un recouvrement plafonné et quand dois-je l'utiliser ?
Les collections plafonnées sont des collections de taille fixe qui écrasent automatiquement les anciens documents lorsqu'elles sont pleines.
Comment créer une collection avec un index TTL (Time-To-Live) ?
Les index TTL suppriment automatiquement les documents après une période déterminée. Créez d'abord la collection, puis ajoutez l'index.
Luce Carter est Senior Developer Advocate chez MongoDB, Microsoft MVP, Contentful Dev Hero, auteur de Beginning MongoDB Atlas with .NET, et amoureux du code, du soleil et de l'apprentissage.