Exportar Datos de MongoDB

MongoDBBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá a utilizar la utilidad de línea de comandos mongoexport para exportar datos de una base de datos MongoDB. Practicará la exportación de datos en dos formatos comunes: JSON y CSV. El laboratorio lo guiará a través de la creación de un conjunto de datos de muestra, la exportación de una colección completa, la selección de campos específicos para la exportación y el uso de consultas para filtrar los datos que exporta. Al final de este laboratorio, será competente en la extracción de datos de MongoDB para copias de seguridad, análisis o migración a otros sistemas.

Exportar una Colección a JSON

En este primer paso, aprenderá el proceso fundamental de exportar una colección de MongoDB a un archivo JSON. JSON (JavaScript Object Notation) es un formato estándar que conserva la rica estructura anidada de los documentos de MongoDB, lo que lo hace ideal para copias de seguridad y migraciones.

Primero, necesita conectarse al servidor MongoDB y crear algunos datos de muestra. Abra la Shell de MongoDB ejecutando el siguiente comando en su terminal:

mongosh

Una vez que esté dentro de la Shell de MongoDB, verá un nuevo prompt. Ahora, cree y cambie a una nueva base de datos llamada exportlab e inserte tres documentos en una colección 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" }
]);

Después de que se inserten los documentos, verá un mensaje de confirmación. Ahora, salga de la Shell de MongoDB para regresar a su terminal normal.

exit;

Con los datos en su lugar, ahora puede usar la utilidad mongoexport para exportar la colección users. Este comando especifica la base de datos, la colección y el archivo de salida.

mongoexport --db=exportlab --collection=users --out=$HOME/project/users.json
  • --db: Especifica la base de datos a la que conectarse (exportlab).
  • --collection: Especifica la colección a exportar (users).
  • --out: Especifica la ruta y el nombre del archivo de salida ($HOME/project/users.json).

Para confirmar que la exportación fue exitosa, vea el contenido del archivo JSON recién creado.

cat ~/project/users.json

Verá los tres documentos que insertó, cada uno en una nueva línea en formato JSON. Este formato se llama JSONL (JSON Lines), donde cada línea contiene un objeto JSON separado y completo. Tenga en cuenta que MongoDB agrega un campo _id único a cada documento.

{"_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"}

Exportar una Colección a CSV

Mientras que JSON es excelente para preservar la estructura de los datos, CSV (Comma-Separated Values) es a menudo más conveniente para su uso en hojas de cálculo o para un intercambio de datos simple. En este paso, exportará la misma colección users a un archivo CSV.

Al exportar a CSV, debe especificar qué campos incluir. Esto se debe a que CSV es un formato plano y tabular y no puede representar estructuras JSON anidadas.

Utilice el comando mongoexport nuevamente, pero esta vez agregue las opciones --type=csv y --fields. Exportaremos los campos name, age y email.

mongoexport --db=exportlab --collection=users --type=csv --fields=name,age,email --out=$HOME/project/users.csv
  • --type=csv: Esta bandera le indica a mongoexport que genere la salida en formato CSV.
  • --fields: Una lista separada por comas de los campos a incluir en la exportación. El orden en que los enumere aquí determinará el orden de las columnas en el archivo CSV.

Ahora, inspeccione el contenido del archivo users.csv.

cat ~/project/users.csv

La salida será un formato CSV estándar, con los nombres de los campos como fila de encabezado, seguido de los datos.

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

Ahora ha exportado con éxito los mismos datos en dos formatos diferentes.

Filtrar Datos con una Consulta

A menudo, no necesita exportar una colección completa. mongoexport le permite usar una consulta para filtrar qué documentos se exportan. Esto es útil para extraer subconjuntos específicos de sus datos.

En este paso, exportará solo los usuarios que tengan un status de "active". La opción --query acepta un documento JSON que especifica los criterios de filtrado, al igual que una operación find() en la Shell de MongoDB.

Ejecute el siguiente comando para exportar solo los usuarios activos a un nuevo archivo JSON llamado active_users.json.

mongoexport --db=exportlab --collection=users --query='{"status": "active"}' --out=$HOME/project/active_users.json
  • --query='{"status": "active"}': Esta opción filtra los documentos, exportando solo aquellos donde el campo status es igual a "active". Tenga en cuenta el uso de comillas simples alrededor de la cadena JSON para evitar problemas de interpretación de la shell.

Verifiquemos el contenido del archivo exportado.

cat ~/project/active_users.json

La salida solo debería contener los documentos de Alice y Bob, ya que el estado de Charlie es "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"}

Esta capacidad de filtrado es potente para crear exportaciones de datos dirigidas sin necesidad de manipular los datos después de que hayan sido exportados.

Formatear y Limitar la Salida

mongoexport proporciona opciones adicionales para controlar el formato y la cantidad de datos que exporta. En este paso, aprenderá cómo crear una salida JSON "pretty" (bonita) más legible para humanos y cómo limitar el número de documentos en su exportación.

Primero, exportaremos la colección users nuevamente, pero esta vez usando la bandera --pretty. Esto formateará la salida JSON con indentación y saltos de línea, haciéndola mucho más fácil de leer.

mongoexport --db=exportlab --collection=users --pretty --out=$HOME/project/users_pretty.json
  • --pretty: Formatea el JSON de salida para que sea legible para humanos.

Vea el archivo formateado para observar la diferencia.

cat ~/project/users_pretty.json

La salida estará bien indentada, así:

[
  {
    "_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"
  }
]

A continuación, utilizará la opción --limit para exportar solo un número específico de documentos. Esto es útil para crear archivos de muestra pequeños o para realizar pruebas. Exportemos solo los dos primeros documentos a un archivo CSV.

mongoexport --db=exportlab --collection=users --type=csv --fields=name,status --limit=2 --out=$HOME/project/users_limited.csv
  • --limit=2: Restringe la exportación a un máximo de 2 documentos.

Compruebe el contenido del archivo CSV limitado.

cat ~/project/users_limited.csv

Como se esperaba, el archivo contiene el encabezado y solo los dos primeros registros de usuario.

name,status
Alice,active
Bob,active

Verificar Archivos Exportados

En este último paso, practicará el uso de herramientas comunes de la línea de comandos de Linux para inspeccionar y verificar los archivos que ha creado. Esta es una habilidad crucial para confirmar la integridad de sus exportaciones de datos.

Primero, liste todos los archivos en su directorio de proyecto para ver todo lo que ha creado. Las banderas -lh mostrarán los detalles en un formato legible para humanos.

ls -lh ~/project/

Debería ver todos los archivos .json y .csv de los pasos anteriores.

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

A continuación, use el comando wc -l para contar el número de líneas en sus archivos. Esta es una forma rápida de verificar el número de documentos exportados.

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

Para los archivos JSON donde cada documento está en una sola línea, el recuento de líneas es igual al recuento de documentos. Para los archivos CSV, el recuento de líneas es el número de filas de datos más uno para el encabezado.

  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

Finalmente, puede validar la sintaxis de los archivos JSON. Tenga en cuenta que mongoexport crea el formato JSONL (JSON Lines) por defecto, donde cada documento es un objeto JSON separado en su propia línea. Para validar este formato, puede verificar cada línea individualmente:

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 los comandos se ejecutan sin errores, sus archivos JSON son válidos. Estas técnicas de verificación ayudan a garantizar que sus exportaciones de datos sean completas y correctas.

Resumen

En este laboratorio, ha aprendido las funciones esenciales de la utilidad mongoexport. Comenzó creando un conjunto de datos de ejemplo y realizando una exportación básica a un archivo JSON. Luego exportó los mismos datos a un archivo CSV, aprendiendo a especificar campos para un formato tabular con --fields. También practicó el uso de la opción --query para filtrar datos y exportar solo un subconjunto específico de documentos. Finalmente, exploró opciones de formato como --pretty para JSON legible por humanos y --limit para controlar la cantidad de registros exportados. A través de estos ejercicios, ha adquirido habilidades prácticas para extraer datos de MongoDB para diversos fines.