MongoDB Analyse des concepts
Peu importe la base de données que nous apprenons, nous devons apprendre ses concepts de base. Dans MongoDB, les concepts de base sont les documents, les collections et les bases de données. Nous allons les présenter un par un ci-dessous.
Le tableau suivant vous aidera à mieux comprendre certains concepts de MongoDB :
| Termes/Concepts SQL | Termes/Concepts MongoDB | Explication/Description |
|---|---|---|
| base de données | base de données | Base de données |
| table | collection | Table de base de données/Collection |
| row | document | Ligne d'enregistrement de données/Document |
| column | champ | Champ de données/Champ |
| index | index | Index |
| jointures de tables | Jointures de tables, non prises en charge par MongoDB | |
| clé primaire | clé primaire | Clé primaire, MongoDB définit automatiquement le champ _id comme clé primaire |
À travers l'exemple de la figure ci-dessous, nous pouvons également comprendre plus intuitivement certains concepts de MongoDB :
Liste complète des termes :
-
Document: L'unité de données de base de MongoDB, généralement une structure de type JSON pouvant contenir plusieurs types de données.
-
Collection: Semblable à une table dans une base de données relationnelle, une collection est un conteneur pour un groupe de documents. Dans MongoDB, les documents d'une collection n'ont pas besoin d'avoir un schéma fixe.
-
Base de données: Une instance MongoDB qui contient une ou plusieurs collections.
-
BSON: L'abréviation de Binary JSON ; c'est la forme binaire de JSON que MongoDB utilise pour stocker et transmettre des documents.
-
Index: Une structure de données utilisée pour optimiser les performances des requêtes. Les index peuvent être créés en fonction d'un ou plusieurs champs d'une collection.
-
Sharding: Une méthode de distribution des données sur plusieurs serveurs (appelés shards) pour gérer de grands ensembles de données et des applications à haut débit.
-
Replica Set: Un groupe de serveurs MongoDB qui maintient le même ensemble de données, fournissant une sauvegarde redondante des données et une haute disponibilité.
-
Primaire: Le serveur dans un Replica Set responsable de la gestion de toutes les opérations d'écriture.
-
Secondaire: Un serveur dans un Replica Set utilisé pour la lecture de données et pour prendre le relais en tant que primaire lorsque le nœud primaire tombe en panne.
-
Shell MongoDB: L'interface en ligne de commande fournie par MongoDB pour interagir avec les instances MongoDB.
-
Framework d'agrégation: Une série d'opérations utilisées pour effectuer des opérations complexes de traitement et d'agrégation de données.
-
Map-Reduce: Un modèle de programmation utilisé pour le calcul parallèle sur de grands ensembles de données.
-
GridFS: Une spécification pour stocker et récupérer des fichiers plus volumineux que la limite de taille des documents BSON.
-
ObjectId: Un identifiant unique généré automatiquement par MongoDB pour chaque document.
-
Opérations CRUD: Opérations de création, lecture, mise à jour et suppression.
-
Transactions: Prises en charge à partir de MongoDB 4.0, permettant à un groupe d'opérations d'être exécuté comme une unité atomique.
-
Opérateurs: Champs spéciaux utilisés pour interroger et mettre à jour des documents.
-
Jointure: MongoDB permet l'utilisation de
$lookupopérateur pour implémenter des opérations de jointure similaires à SQL. -
TTL(Time-To-Live): Vous pouvez définir TTL sur certains champs d'une collection pour supprimer automatiquement les anciennes données.
-
Moteur de stockage: La technologie sous-jacente que MongoDB utilise pour le stockage et la gestion des données, comme WiredTiger et l'ancien moteur de stockage MMAPv1 de MongoDB.
-
MongoDB Compass: Outil d'interface graphique de MongoDB pour visualiser et gérer les données MongoDB.
-
MongoDB Atlas: Un service cloud fourni par MongoDB qui permet d'héberger des bases de données MongoDB dans le cloud.
Base de données
Plusieurs bases de données peuvent être créées dans un même MongoDB.
Si aucune base de données n'est spécifiée lors des opérations, MongoDB utilisera une base de données nomméetestcomme base de données par défaut, qui est stockée dans le répertoire de données.
Une seule instance de MongoDB peut héberger plusieurs bases de données indépendantes, chacune avec ses propres collections et autorisations. Les différentes bases de données sont également placées dans des fichiers différents.
À partir de MongoDB 4.0, les transactions multi-documents sur une seule base de données sont prises en charge.
"show dbs"La commande peut afficher la liste de toutes les bases de données.
$ ./mongo MongoDB shell version: 3.0.6 connecting to: test > show dbs local 0.078GB test 0.078GB >
Exécuter"db"La commande peut afficher l'objet ou la collection de la base de données actuelle.
$ ./mongo MongoDB shell version: 3.0.6 connecting to: test > db test >
L'exécution de la commande "use" permet de se connecter à une base de données spécifiée.
> use local switched to db local > db local >
Dans l'exemple de commande ci-dessus, "local" est la base de données à laquelle vous voulez vous connecter.
Dans le prochain chapitre, nous expliquerons en détail l'utilisation des commandes dans MongoDB.
Les bases de données sont également identifiées par leur nom. Un nom de base de données peut être n'importe quelle chaîne UTF-8 qui satisfait les conditions suivantes.
- Ne peut pas être une chaîne vide ("").
- Ne doit pas contenir ' ' (espace), ., $, /, \, et \0 (caractère nul).
- Doit être tout en minuscules.
- Au maximum 64 octets.
Certains noms de bases de données sont réservés et permettent d'accéder directement à ces bases de données à usage spécifique.
- admin: D'un point de vue des permissions, il s'agit de la base de données "root". Si vous ajoutez un utilisateur à cette base de données, l'utilisateur hérite automatiquement des permissions de toutes les bases de données. Certaines commandes spécifiques côté serveur ne peuvent être exécutées qu'à partir de cette base de données, comme lister toutes les bases de données ou arrêter le serveur.
- local:Cette base de données n'est jamais répliquée et peut être utilisée pour stocker toutes les collections limitées à un seul serveur local.
- config: lorsque MongoDB est utilisé dans des configurations de sharding, la base de données config est utilisée en interne pour enregistrer les informations liées au sharding.
Document
Un document est un ensemble de paires clé-valeur (c.-à-d. BSON). Les documents MongoDB n'ont pas besoin d'avoir les mêmes champs, et les mêmes champs n'ont pas besoin d'avoir les mêmes types de données. C'est une différence majeure avec les bases de données relationnelles et une caractéristique très importante de MongoDB.
Un exemple simple de document est le suivant :
{"site":"www.example.com", "name":"Example"}
Le tableau suivant liste les termes correspondants entre SGBDR et MongoDB :
| SGBDR | MongoDB |
|---|---|
| Base de données | Base de données |
| Tableau | Collection |
| line | Document |
| Column | Champ |
| Jointures de tables | Document intégré |
| Clé primaire | Clé primaire (MongoDB fournit la clé sous la forme _id) |
| Serveur de base de données et client | |
| Mysqld/Oracle | mongodb |
| mysql/sqlplus | mongo |
Il convient de noter que :
- Les paires clé/valeur d'un document sont ordonnées.
- Les valeurs d'un document peuvent non seulement être des chaînes entre guillemets doubles, mais aussi plusieurs autres types de données (même un document imbriqué entier).
- MongoDB fait la distinction entre les types et la casse.
- Les documents MongoDB ne peuvent pas avoir de clés en double.
- Les clés d'un document sont des chaînes. À quelques exceptions près, les clés peuvent utiliser des caractères UTF-8 quelconques.
Conventions de nommage des clés de document :
- Les clés ne peuvent pas contenir \0 (caractère nul). Ce caractère est utilisé pour indiquer la fin d'une clé.
- . et $ ont des significations spéciales et ne peuvent être utilisés que dans des circonstances spécifiques.
- Les clés commençant par un trait de soulignement "_" sont réservées (non strictement obligatoires).
Collection
Une collection est un groupe de documents MongoDB, semblable à une table dans un SGBDR (système de gestion de base de données relationnelle).
Les collections existent dans les bases de données et n'ont pas de structure fixe. Cela signifie que vous pouvez insérer des données de formats et de types différents dans une collection, mais dans des circonstances normales, les données que nous insérons dans une collection ont une certaine pertinence.
Par exemple, nous pouvons insérer dans une collection des documents avec les différentes structures de données suivantes :
{"site":"www.baidu.com"}
{"site":"www.google.com","name":"Google"}
{"site":"www.example.com","name":"Example","num":5}
Lorsque le premier document est inséré, la collection est créée.
Noms de collection valides
- Un nom de collection ne peut pas être une chaîne vide "".
- Un nom de collection ne peut pas contenir le caractère \0 (caractère nul). Ce caractère représente la fin du nom de collection.
- Un nom de collection ne peut pas commencer par "system." ; il s'agit d'un préfixe réservé aux collections système.
- Les noms de collection créés par les utilisateurs ne peuvent pas contenir de caractères réservés. Certains pilotes prennent en charge l'inclusion de $ dans les noms de collection, car certaines collections générées par le système contiennent ce caractère. À moins que vous n'ayez besoin d'accéder à de telles collections créées par le système, n'utilisez jamais $ dans vos noms de collection.
L'exemple suivant :
db.col.findOne()
collections plafonnées
Les collections plafonnées sont des collections de taille fixe.
Elles ont des performances élevées et des caractéristiques d'expiration de file d'attente (expiration dans l'ordre d'insertion). Cela ressemble quelque peu au concept « RRD ».
Les collections plafonnées sont performantes et conservent automatiquement l’ordre d’insertion des objets. Elles conviennent très bien à des fonctions telles que la journalisation. Contrairement aux collections standard, vous devez créer explicitement une collection plafonnée et spécifier la taille de la collection en octets. L’espace de stockage des données de la collection est préalloué.
Les collections plafonnées peuvent stocker des documents dans l’ordre d’insertion, et leurs positions sur le disque sont également enregistrées dans l’ordre d’insertion. Par conséquent, lorsque nous mettons à jour des documents dans une collection plafonnée, le document mis à jour ne peut pas dépasser la taille du document précédent. Cela garantit que les positions de tous les documents sur le disque restent inchangées.
Comme une collection plafonnée détermine la position d’insertion par l’ordre d’insertion des documents plutôt qu’en utilisant des index, cela peut améliorer l’efficacité de l’ajout de données. Le fichier journal d’opérations oplog.rs de MongoDB est implémenté à l’aide de collections plafonnées.
Notez que la taille de stockage spécifiée inclut les informations d’en-tête de la base de données.
db.createCollection("mycoll", {capped:true, size:100000})
- Dans une collection plafonnée, vous pouvez ajouter de nouveaux objets.
- Les mises à jour sont possibles ; toutefois, les objets n’augmenteront pas l’espace de stockage. Si c’est le cas, la mise à jour échouera.
- Avec une collection plafonnée, vous ne pouvez pas supprimer un document. Vous pouvez utiliser la méthode drop() pour supprimer toutes les lignes de la collection.
- Après la suppression, vous devez recréer explicitement la collection.
- Sur les machines 32 bits, le stockage maximal d’une collection plafonnée est de 1e9 (1X109) octets.
Métadonnées
Les informations de base de données sont stockées dans des collections. Elles utilisent l’espace de noms système :
dbname.system.*
Dans MongoDB, l’espace de noms <dbname>.system.* est une collection spéciale (Collection) qui contient diverses informations système, comme suit :
| Espace de noms de collection | Description |
|---|---|
| dbname.system.namespaces | Lister tous les espaces de noms. |
| dbname.system.indexes | Lister tous les index. |
| dbname.system.profile | Contient les informations de profil de la base de données. |
| dbname.system.users | Lister tous les utilisateurs des bases de données accessibles. |
| dbname.local.sources | Contient les informations sur le serveur et l'état des pairs de réplication (esclaves). |
Les restrictions suivantes s'appliquent à la modification des objets dans les collections système.
L'insertion de données dans {{system.indexes}} peut créer un index. Mais à part cela, les informations de cette table sont immuables (la commande spéciale drop index mettra automatiquement à jour les informations associées).
{{system.users}} est modifiable. {{system.profile}} est supprimable.
Types de données MongoDB
Le tableau suivant répertorie plusieurs types de données couramment utilisés dans MongoDB.
| Type de données | Description |
|---|---|
| String | String. Un type de données courant pour stocker des données. Dans MongoDB, seules les chaînes encodées en UTF-8 sont valides. |
| Integer | Integer. Utilisé pour stocker des valeurs numériques. Selon le serveur que vous utilisez, il peut être 32-bit ou 64-bit. |
| Boolean | Boolean. Utilisé pour stocker des valeurs booléennes (true/false). |
| Double | Double. Utilisé pour stocker des valeurs à virgule flottante. |
| Clés Min/Max | Compare une valeur aux valeurs les plus basses et les plus élevées des éléments BSON (Binary JSON). |
| Tableau | Utilisé pour stocker un tableau, une liste ou plusieurs valeurs sous une seule clé. |
| Horodatage | Timestamp. Enregistre l'heure précise à laquelle un document est modifié ou ajouté. |
| Object | Utilisé pour les documents imbriqués. |
| Null | Utilisé pour créer une valeur null. |
| Symbole | Symbol. Ce type de données est essentiellement équivalent au type chaîne de caractères, mais la différence est qu'il est généralement utilisé dans les langages qui adoptent un type symbole spécial. |
| Date | Date. Stocke la date ou l'heure actuelle au format d'heure UNIX. Vous pouvez spécifier votre propre date et heure : créez un objet Date et transmettez les informations d'année, de mois et de jour. |
| ID d'objet | ID d'objet. Utilisé pour créer l'ID d'un document. |
| Données binaires | Données binaires. Utilisées pour stocker des données binaires. |
| Code | Type Code. Utilisé pour stocker du code JavaScript dans un document. |
| Expression régulière | Type d'expression régulière. Utilisé pour stocker des expressions régulières. |
Ce qui suit explique plusieurs types de données importants.
ObjectId
ObjectId est similaire à une clé primaire unique ; il peut être généré et trié rapidement. Il contient 12 octets, ce qui signifie :
- Les 4 premiers octets représentent la créationunixhorodatage, temps moyen de GreenwichUTC, 8 heures de retard sur l'heure de Pékin
- Les 3 octets suivants sont le code identifiant de la machine
- Les deux octets suivants constituent l'ID de processus (PID)
- Les trois derniers octets sont un nombre aléatoire

Les documents stockés dans MongoDB doivent avoir une clé _id. La valeur de cette clé peut être de n'importe quel type ; par défaut, il s'agit d'un objet ObjectId.
Comme l'ObjectId contient l'horodatage de création, vous n'avez pas besoin d'enregistrer un champ d'horodatage pour votre document. Vous pouvez utiliser la fonction getTimestamp pour obtenir l'heure de création du document :
> var newObject = ObjectId()
> newObject.getTimestamp()
ISODate("2017-11-25T07:21:10Z")
Convertir ObjectId en chaîne
> newObject.str 5a1919e63df83ce79df8b38f
String
Les chaînes BSON sont encodées en UTF-8.
Horodatage
BSON dispose d'un type timestamp spécial utilisé en interne par MongoDB, qui n'est pas lié au type Date ordinaire. Une valeur timestamp est une valeur de 64 bits. Parmi eux :
- Les 32 premiers bits sont une valeur time_t (le nombre de secondes depuis l'époque Unix)
- Les 32 derniers bits sont un ordinal incrémenté pour les opérations dans une seconde donnée
Ordinal number
Dans une instance mongod unique, les valeurs d'horodatage sont généralement uniques.
Dans un jeu de réplicas, l'oplog a un champ ts. La valeur de ce champ utilise un horodatage BSON pour représenter l'heure de l'opération.
Le type horodatage BSON est principalement utilisé en interne par MongoDB. Dans la plupart des situations de développement d'applications, vous pouvez utiliser le type date BSON.
Date
Représente le nombre de millisecondes depuis l'époque Unix (1er janvier 1970). Le type date est signé ; les nombres négatifs représentent des dates avant 1970.
> var mydate1 = new Date() //格林尼治时间
> mydate1
ISODate("2018-03-04T14:58:51.233Z")
> typeof mydate1
object
> var mydate2 = ISODate() //格林尼治时间
> mydate2
ISODate("2018-03-04T15:00:45.479Z")
> typeof mydate2
object
Le temps créé de cette façon est de type date, et vous pouvez utiliser les méthodes du type Date en JS.
Renvoie une chaîne de type temps :
> var mydate1str = mydate1.toString() > mydate1str Sun Mar 04 2018 14:58:51 GMT+0000 (UTC) > typeof mydate1str string
ou
> Date() Sun Mar 04 2018 15:02:59 GMT+0000 (UTC)Autres extensions