Importer, exporter et restaurer des données
Importer
1. L’utilitaire mongoimport
Le programme mongoimport vous sera d’une grande utilité pour importer des données contenues dans des fichiers au format JSON, CSV ou TSV (dans les premiers, les champs sont séparés par des virgules tandis que dans le dernier ils sont séparés par des tabulations). Comme mongofiles, il ne s’utilise pas depuis mongosh, mais depuis un terminal. Nous effectuerons les commandes à venir avec l’utilisateur mongosensei, créé il y a plusieurs chapitres de cela. Pour qu’un utilisateur puisse effectuer des opérations d’importation, il doit au moins posséder le rôle readWrite sur la base de données qu’il cible, ce qui est le cas de mongosensei.
Cet utilitaire ne prend en charge que les documents dont le codage est UTF-8 et toute tentative d’importer des données depuis un fichier comportant un autre codage se soldera par un échec. Voici par exemple l’erreur levée par une tentative d’importation depuis un fichier codé en UTF-16 :
connected to: mongodb://localhost/
Failed: error processing document #1: invalid character 'ÿ'
looking for beginning of value
imported 0 documents
2. Importer des données depuis un fichier JSON
JSON est le format utilisé par défaut par mongoimport. Pour réaliser notre premier import, nous écrivons un fichier spectacle.json qui contient trois documents, chacun occupant une ligne :
{"_id": 1, "titre": "Platonov", "auteur": "Tchekov", "lieu": "Théâtre
Golovine",
"date": ISODate("2024-07-25T22:00:00Z"), "prix": 20}
{"_id": 2, "titre": "Hamlet", "auteur": "Shakespeare", "lieu":
"Théâtre du
Forum", "date": ISODate("2024-07-24T20:00:00Z"), "prix": 17}
{"_id": 3, "titre": "L'Avare", "auteur": "Molière", "lieu":
"Théâtre des Doms",
"date": ISODate("2024-07-23T20:00:00Z"), "prix": 15}
Nous utiliserons la commande d’importation avec les paramètres d’authentification...
Exporter
1. L’utilitaire mongodump
L’exécutable mongodump permet de créer un export de vos bases de données au format binaire. Écrivons la commande qui permettra d’exporter le contenu de la base de données test, qui a servi à la majeure partie de nos exemples, dans le répertoire/tmp (attention, si des fichiers d’export s’y trouvent déjà, ils seront écrasés !) :
mongodump -u "mongosensei" --authenticationDatabase "admin" \
--db test -o=/tmp
Voici une partie de l’affichage que nous obtenons :
writing test.personnes to /tmp/test/personnes.bson
writing test.personnel to /tmp/test/personnel.bson
writing test.livres to /tmp/test/livres.bson
done dumping test.personnes (9 documents)
done dumping test.personnel (9 documents)
done dumping test.livres (8 documents)
Si nous prenons la peine de regarder ce qui se trouve dans le répertoire /tmp, nous constatons que mongodump a créé un sous-répertoire portant le nom de la base de données ciblée. Pour chaque collection, nous trouvons deux fichiers : l’un d’entre eux porte l’extension .json et l’autre .bson. Si nous consultons le contenu du fichier qui contient les métadonnées au format JSON, nous pouvons y voir les index que nous avons posés :
cat personnes.metadata.json
{"options":{},"indexes":[{"v":2,"key":
"_id":1},"name":"_id_","ns":"test.personnes"},{"v":2,"key":
{"prenom":1.0},"name":"prenom_1","ns":"test.personnes",
"background":true},
{"v":2,"key":
{"nom":1.0,"age":1.0},"name":"idx_nom_age","ns":"test.personnes"}], ...
Restaurer
Le programme mongorestore charge des données contenues dans des fichiers binaires exportés à l’aide de mongodump ou bien à partir de l’entrée standard.
Lorsque nous avons utilisé mongodump, l’opération a créé un répertoire portant le nom de la base de données dans le répertoire temporaire /tmp. Supposons qu’entre temps nous ayons supprimé la base de données test qui sert de support à nos exemples depuis le début de ce livre... Pas de panique ! Grâce à mongorestore nous allons pouvoir récupérer les données telles qu’elles étaient. Cet exécutable s’invoque de la manière suivante :
mongorestore < options > < répertoire de fichiers BSON ou
fichier BSON unique >
Pour l’utiliser de manière très simple, nous allons lui indiquer le répertoire dans lequel mongodump a généré des fichiers BSON et évidemment, le nom de la base de données dans laquelle il doit réaliser la restauration des données (option -d) :
mongorestore -u "mongosensei" --authenticationDatabase
"admin" /tmp/test -d test
Voici une partie de ce qui s’affiche à l’écran durant l’exécution de ce processus...
building a list of collections to restore...