Exporter des données MongoDB

MongoDBBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à utiliser l'utilitaire en ligne de commande mongoexport pour exporter des données d'une base de données MongoDB. Vous pratiquerez l'exportation de données dans deux formats courants : JSON et CSV. Le laboratoire vous guidera à travers la création d'un ensemble de données d'exemple, l'exportation d'une collection entière, la sélection de champs spécifiques à exporter et l'utilisation de requêtes pour filtrer les données que vous exportez. À la fin de ce laboratoire, vous maîtriserez l'extraction de données de MongoDB pour des sauvegardes, des analyses ou des migrations vers d'autres systèmes.

Exportation d'une collection en JSON

Dans cette première étape, vous apprendrez le processus fondamental d'exportation d'une collection MongoDB vers un fichier JSON. JSON (JavaScript Object Notation) est un format standard qui préserve la structure riche et imbriquée des documents MongoDB, ce qui le rend idéal pour les sauvegardes et les migrations.

Tout d'abord, vous devez vous connecter au serveur MongoDB et créer des données d'exemple. Ouvrez le Shell MongoDB en exécutant la commande suivante dans votre terminal :

mongosh

Une fois que vous êtes dans le Shell MongoDB, vous verrez une nouvelle invite. Maintenant, créez et basculez vers une nouvelle base de données nommée exportlab, et insérez trois documents dans une collection users.

use exportlab
db.users.insertMany([
  { name: "Alice", age: 28, email: "alice@example.com", status: "active" },
  { name: "Bob", age: 35, email: "bob@example.com", status: "active" },
  { name: "Charlie", age: 42, email: "charlie@example.com", status: "inactive" }
]);

Après l'insertion des documents, vous verrez un message de confirmation. Maintenant, quittez le Shell MongoDB pour revenir à votre terminal habituel.

exit;

Une fois les données en place, vous pouvez maintenant utiliser l'utilitaire mongoexport pour exporter la collection users. Cette commande spécifie la base de données, la collection et le fichier de sortie.

mongoexport --db=exportlab --collection=users --out=$HOME/project/users.json
  • --db: Spécifie la base de données à laquelle se connecter (exportlab).
  • --collection: Spécifie la collection à exporter (users).
  • --out: Spécifie le chemin et le nom du fichier de sortie ($HOME/project/users.json).

Pour confirmer que l'exportation a réussi, affichez le contenu du fichier JSON nouvellement créé.

cat ~/project/users.json

Vous verrez les trois documents que vous avez insérés, chacun sur une nouvelle ligne au format JSON. Ce format est appelé JSONL (JSON Lines), où chaque ligne contient un objet JSON distinct et complet. Notez que MongoDB ajoute un champ _id unique à chaque document.

{"_id":{"$oid":"656f1a6b..."},"name":"Alice","age":28,"email":"alice@example.com","status":"active"}
{"_id":{"$oid":"656f1a6b..."},"name":"Bob","age":35,"email":"bob@example.com","status":"active"}
{"_id":{"$oid":"656f1a6b..."},"name":"Charlie","age":42,"email":"charlie@example.com","status":"inactive"}

Exportation d'une collection en CSV

Alors que le JSON est excellent pour préserver la structure des données, le CSV (Comma-Separated Values) est souvent plus pratique pour une utilisation dans des tableurs ou pour un échange de données simple. Dans cette étape, vous exporterez la même collection users vers un fichier CSV.

Lors de l'exportation au format CSV, vous devez spécifier les champs à inclure. En effet, le CSV est un format plat et tabulaire et ne peut pas représenter les structures JSON imbriquées.

Utilisez à nouveau la commande mongoexport, mais cette fois ajoutez les options --type=csv et --fields. Nous exporterons les champs name, age et email.

mongoexport --db=exportlab --collection=users --type=csv --fields=name,age,email --out=$HOME/project/users.csv
  • --type=csv: Ce drapeau indique à mongoexport de produire la sortie au format CSV.
  • --fields: Une liste de champs séparés par des virgules à inclure dans l'exportation. L'ordre dans lequel vous les listez ici détermine l'ordre des colonnes dans le fichier CSV.

Maintenant, inspectez le contenu du fichier users.csv.

cat ~/project/users.csv

La sortie sera un format CSV standard, avec les noms des champs comme ligne d'en-tête, suivis des données.

name,age,email
Alice,28,alice@example.com
Bob,35,bob@example.com
Charlie,42,charlie@example.com

Vous avez maintenant exporté avec succès les mêmes données dans deux formats différents.

Filtrage des données avec une requête

Souvent, vous n'avez pas besoin d'exporter une collection entière. mongoexport vous permet d'utiliser une requête pour filtrer les documents à exporter. Ceci est utile pour extraire des sous-ensembles spécifiques de vos données.

Dans cette étape, vous exporterez uniquement les utilisateurs dont le status est "active". L'option --query accepte un document JSON qui spécifie les critères de filtrage, tout comme une opération find() dans le Shell MongoDB.

Exécutez la commande suivante pour exporter uniquement les utilisateurs actifs vers un nouveau fichier JSON nommé active_users.json.

mongoexport --db=exportlab --collection=users --query='{"status": "active"}' --out=$HOME/project/active_users.json
  • --query='{"status": "active"}': Cette option filtre les documents, exportant uniquement ceux où le champ status est égal à "active". Notez l'utilisation d'apostrophes autour de la chaîne JSON pour éviter les problèmes d'interprétation par le shell.

Vérifions le contenu du fichier exporté.

cat ~/project/active_users.json

La sortie ne devrait contenir que les documents d'Alice et de Bob, car le statut de Charlie est "inactive".

{"_id":{"$oid":"656f1a6b..."},"name":"Alice","age":28,"email":"alice@example.com","status":"active"}
{"_id":{"$oid":"656f1a6b..."},"name":"Bob","age":35,"email":"bob@example.com","status":"active"}

Cette capacité de filtrage est puissante pour créer des exportations de données ciblées sans avoir à manipuler les données après leur exportation.

Formatage et limitation de la sortie

mongoexport offre des options supplémentaires pour contrôler le format et la quantité de données que vous exportez. Dans cette étape, vous apprendrez comment créer une sortie JSON "pretty" (lisible par l'homme) et comment limiter le nombre de documents dans votre exportation.

Tout d'abord, exportons à nouveau la collection users, mais cette fois en utilisant le drapeau --pretty. Cela formatera la sortie JSON avec une indentation et des sauts de ligne, la rendant beaucoup plus facile à lire.

mongoexport --db=exportlab --collection=users --pretty --out=$HOME/project/users_pretty.json
  • --pretty: Formate le JSON de sortie pour qu'il soit lisible par l'homme.

Visualisez le fichier formaté pour voir la différence.

cat ~/project/users_pretty.json

La sortie sera joliment indentée, comme ceci :

[
  {
    "_id": {
      "$oid": "656f1a6b..."
    },
    "name": "Alice",
    "age": 28,
    "email": "alice@example.com",
    "status": "active"
  },
  {
    "_id": {
      "$oid": "656f1a6b..."
    },
    "name": "Bob",
    "age": 35,
    "email": "bob@example.com",
    "status": "active"
  },
  {
    "_id": {
      "$oid": "656f1a6b..."
    },
    "name": "Charlie",
    "age": 42,
    "email": "charlie@example.com",
    "status": "inactive"
  }
]

Ensuite, vous utiliserez l'option --limit pour exporter seulement un nombre spécifique de documents. Ceci est utile pour créer de petits fichiers d'échantillons ou pour des tests. Exportons seulement les deux premiers documents vers un fichier CSV.

mongoexport --db=exportlab --collection=users --type=csv --fields=name,status --limit=2 --out=$HOME/project/users_limited.csv
  • --limit=2: Restreint l'exportation à un maximum de 2 documents.

Vérifiez le contenu du fichier CSV limité.

cat ~/project/users_limited.csv

Comme prévu, le fichier contient l'en-tête et seulement les deux premiers enregistrements d'utilisateurs.

name,status
Alice,active
Bob,active

Vérification des fichiers exportés

Dans cette dernière étape, vous vous entraînerez à utiliser des outils courants de la ligne de commande Linux pour inspecter et vérifier les fichiers que vous avez créés. C'est une compétence cruciale pour confirmer l'intégrité de vos exportations de données.

Tout d'abord, listez tous les fichiers de votre répertoire de projet pour voir tout ce que vous avez créé. Les drapeaux -lh afficheront les détails dans un format lisible par l'homme.

ls -lh ~/project/

Vous devriez voir tous les fichiers .json et .csv des étapes précédentes.

total 20K
-rw-rw-r-- 1 labex labex 224 Aug 27 15:48  active_users.json
-rw-rw-r-- 1 labex labex  96 Aug 27 15:48  users.csv
-rw-rw-r-- 1 labex labex 344 Aug 27 15:36  users.json
-rw-rw-r-- 1 labex labex  36 Aug 27 15:48  users_limited.csv
-rw-rw-r-- 1 labex labex 410 Aug 27 15:48  users_pretty.json

Ensuite, utilisez la commande wc -l pour compter le nombre de lignes dans vos fichiers. C'est un moyen rapide de vérifier le nombre de documents exportés.

wc -l ~/project/*.json ~/project/*.csv

Pour les fichiers JSON où chaque document est sur une seule ligne, le nombre de lignes est égal au nombre de documents. Pour les fichiers CSV, le nombre de lignes est le nombre de lignes de données plus une pour l'en-tête.

  2 /home/labex/project/active_users.json
  3 /home/labex/project/users.json
27 /home/labex/project/users_pretty.json
  4 /home/labex/project/users.csv
  3 /home/labex/project/users_limited.csv
39 total

Enfin, vous pouvez valider la syntaxe des fichiers JSON. Notez que mongoexport crée par défaut le format JSONL (JSON Lines), où chaque document est un objet JSON distinct sur sa propre ligne. Pour valider ce format, vous pouvez vérifier chaque ligne individuellement :

while IFS= read -r line; do
  echo "$line" | python3 -m json.tool > /dev/null
done < ~/project/users.json && echo "All JSON lines are valid"

Si les commandes s'exécutent sans erreur, vos fichiers JSON sont valides. Ces techniques de vérification vous aident à garantir que vos exportations de données sont complètes et correctes.

Résumé

Dans ce laboratoire, vous avez appris les fonctions essentielles de l'utilitaire mongoexport. Vous avez commencé par créer un ensemble de données d'exemple et effectué une exportation de base vers un fichier JSON. Vous avez ensuite exporté les mêmes données vers un fichier CSV, en apprenant à spécifier les champs pour un format tabulaire avec --fields. Vous vous êtes également exercé à utiliser l'option --query pour filtrer les données et exporter uniquement un sous-ensemble spécifique de documents. Enfin, vous avez exploré les options de formatage comme --pretty pour un JSON lisible par l'homme et --limit pour contrôler le nombre d'enregistrements exportés. Grâce à ces exercices, vous avez acquis des compétences pratiques pour extraire des données de MongoDB à diverses fins.