Importar, exportar y restaurar datos
Importar
1. La utilidad mongoimport
El programa mongoimport es muy útil para importar datos contenidos en archivos en formato JSON, CSV o TSV (en los primeros, los campos se separan por comas mientras que en los segundos se separan por tabuladores). Al igual que mongofiles, no se utiliza desde mongosh, sino desde una terminal. Realizaremos los comandos que vienen con el usuario mongosensei, creado varios capítulos atrás. Para que un usuario pueda realizar operaciones de importación, debe tener al menos el rol readWrite en la base de datos a la que se dirige, que es el caso de mongosensei.
Esta utilidad solo admite documentos con codificación UTF-8; cualquier intento de importar datos desde un archivo con otra codificación fallará. A continuación, se muestra un ejemplo del error generado por un intento de importación desde un archivo codificado en UTF-16:
connected to: mongodb://localhost/
Failed: error processing document #1: invalid character 'ÿ'
looking for beginning of value
imported 0 documents
2. Importar datos desde un archivo JSON
JSON es el formato utilizado de forma predefinida por mongoimport. Para realizar nuestra primera importación, escribimos un archivo espectáculos.json que contiene tres documentos, cada uno de los cuales ocupa una línea:
{ "_id": 1, "título": "Platonov", "autor": "Tchekov", "lugar": "Teatro Golovine",
"fecha": ISODate("2024-07-25T22:00:00Z"), "precio": 20}
{ "_id": 2, "título": "Hamlet", "autor": "Shakespeare", "lugar":
"Teatro del Fórum", "fecha": ISODate("2024-07-24T20:00:00Z"), "precio": 17}
{ "_id": 3, "título": "El Avaro ", "autor": "Molière", "lugar":
"Teatro de los Domos",
"fecha": ISODate("2024-07-23T20:00:00Z"), "precio": 15}
Utilizaremos el comando importar con los parámetros de autenticación utilizados anteriormente y las siguientes opciones:
-
db: la base de datos de destino, en este caso test.
-
colección: el nombre de la colección a la que se importarán...
Exportar
1. La utilidad mongodump
El ejecutable mongodump se puede utilizar para exportar bases de datos en formato binario. Escribamos el comando que exportará el contenido de la base de datos test, que se ha utilizado para la mayoría de nuestros ejemplos, al directorio /tmp (cuidado, si ya hay archivos de exportación allí, ¡se sobrescribirán!):
mongodump -u "mongosensei" --authenticationDatabase "admin" \
--db test -o=/tmp
Esta es una parte de la pantalla que se obtiene:
writing test.personas to /tmp/test/ personas.bson
writing test.personas to /tmp/test/personas.bson
writing test.libros to /tmp/test/libros.bson
done dumping test.personas (9 documents)
done dumping test.personas (9 documents)
done dumping test.libros (8 documents)
Si nos tomamos la molestia de mirar qué hay en el directorio /tmp, vemos que mongodump ha creado un subdirectorio con el nombre de la base de datos objetivo. Para cada colección, encontramos dos archivos: uno con la extensión .json y el otro .bson. Si observamos el contenido del archivo que contiene los metadatos en formato JSON, podemos ver los índices que se han establecido:
cat personas.metadata.json
{"options":{},"indexes":[{"v":2,"key":
"_id":1},"name":"_id_","ns":"test.personas"},{"v":2,"key":
{"nombre":1.0},"name":"nombre_1","ns":"test.personas",
"background":true},
{"v":2, "key":
{"nombre":1.0,"edad":1.0},"name":"idx_nombre_edad","ns":"test.personas"}],
"uuid": "e00491...
Restaurar
El programa mongorestore carga datos contenidos en archivos binarios exportados mediante mongodump o desde la entrada estándar.
Cuando utilizamos mongodump, la operación creó un directorio con el nombre de la base de datos en el directorio temporal /tmp. Supongamos que mientras tanto hemos borrado la base de datos de prueba que se ha utilizado para apoyar nuestros ejemplos desde el principio de este libro... ¡Que no cunda el pánico! Gracias a mongorestore, podremos recuperar los datos tal y como estaban. Este ejecutable se invoca de la siguiente manera:
mongorestore < opciones > < directorio de archivos BSON o
archivo BSON único >
Para utilizarlo de forma muy sencilla, vamos a indicarle el directorio en el que mongodump generó los archivos BSON y, por supuesto, el nombre de la base de datos en la que se deben restaurar los datos (opción -d):
mongorestore -u "mongosensei" --authenticationDatabase
"admin" /tmp/test -d test
Esto es lo que aparece en la pantalla cuando se ejecuta este proceso...
building a list of collections to restore from /tmp/test dir
reading metadata for test.meteo from /tmp/test/meteo.metadata.json
reading metadata for test.personas from /tmp/test/
personas.metadata.json
restoring test.meteo from /tmp/test/meteo.bson
restoring test.personas from /tmp/test/personas.bson
reading...