Importar un array JSON en MongoDB con mongoimport en Linux

Si queremos importar un array JSON en MongoDB, podemos hacerlo empleando mongoimport dentro de la terminal de Linux. Pero hay que personalizar un poco el código para evitar que nos dé errores.

Si tenéis varios archivos JSON que queréis importar, podeis combinarlos usando jq en Linux. De este modo tendréis solo un archivo que importar a MongoDB.

Importar un array json en MongoDB

Primero vamos a crear una base de datos y una colección en MongoDB. La base de datos la vamos a llamar coches y a la colección la llamaremos dtc.

Segundo, tenemos un archivo JSON en nuestro ordenador que tiene un array de datos. Este archivo se llama manifest.json.

Ejecutamos mongoimport en la terminal de Linux

Ahora abrimos una terminal de Linux, nos dirigimos hacia la carpeta donde está nuestro archivo JSON y ejecutamos mongoimport.

En este comando hay que indicar el nombre de la base de datos (después de --db), de la colección (después de --collection) y del archivo a importar (después de --file).

El comando específico en nuestro caso, con los nombres especificados, sería el siguiente:

mongoimport --db coches --collection dtc --file manifest.json

Sin embargo, al ejecutar la línea anterior nos sale el siguiente error, indicando que no se ha importado ningún documento.

$ mongoimport --db coches --collection dtc --file manifest.json
2020-03-25T12:45:31.448+0100    connected to: localhost
2020-03-25T12:45:31.454+0100    Failed: error unmarshaling bytes on document #0: JSON decoder out of sync - data changing underfoot?
2020-03-25T12:45:31.454+0100    imported 0 documents

Esto se puede solucionar, entre otras opciones, añadiendo --jsonArray al comando de ejecución de mongoimport.

Añadir –jsonarray

--jsonArray puede añadirse en cualquier posición del comando. Nosotros hemos decidido añadirlo al final para que sea más visible.

$ mongoimport --db coches --collection dtc --file manifest.json --jsonArray
2020-03-25T12:25:36.676+0100	connected to: localhost
2020-03-25T12:25:36.694+0100	imported 274 documents

Como puede observarse, ya se han importado satisfactoriamente 274 documentos a la colección dtc que se encuentra dentro de la base de datos coches.

Si por un casual vuestro archivo fuese de un tamaño considerable, podríamos ver una barra de desarrollo en la terminal indicando cómo va el proceso de carga. Ahora voy a cargar un archivo en (manifest_01.json) de más de 600 MB de tamaño en la misma base de datos y colección.

$ mongoimport --db coches --collection dtc --file manifest_01.json --jsonArray
2020-03-25T16:02:25.153+0100    connected to: localhost
2020-03-25T16:02:28.149+0100    [#…………………..] coches.dtc   42.4MB/611MB (6.9%)
2020-03-25T16:02:31.150+0100    [###…………………] coches.dtc   87.7MB/611MB (14.4%)
2020-03-25T16:02:34.149+0100    [#####……………….] coches.dtc   132MB/611MB (21.6%)
2020-03-25T16:02:37.150+0100    [######………………] coches.dtc   176MB/611MB (28.8%)
2020-03-25T16:02:40.149+0100    [########…………….] coches.dtc   218MB/611MB (35.7%)
2020-03-25T16:02:43.152+0100    [##########…………..] coches.dtc   263MB/611MB (43.0%)
2020-03-25T16:02:46.151+0100    [############…………] coches.dtc   308MB/611MB (50.3%)
2020-03-25T16:02:49.149+0100    [#############………..] coches.dtc   353MB/611MB (57.8%)
2020-03-25T16:02:52.149+0100    [###############………] coches.dtc   398MB/611MB (65.0%)
2020-03-25T16:02:55.149+0100    [#################…….] coches.dtc   440MB/611MB (72.0%)
2020-03-25T16:02:58.150+0100    [###################…..] coches.dtc   486MB/611MB (79.4%)
2020-03-25T16:03:01.150+0100    [####################….] coches.dtc   529MB/611MB (86.6%)
2020-03-25T16:03:04.151+0100    [######################..] coches.dtc   573MB/611MB (93.7%)
2020-03-25T16:03:06.779+0100    [########################] coches.dtc   611MB/611MB (100.0%)
2020-03-25T16:03:06.779+0100    imported 837357 documents

Como podéis ver, este archivo acabó importando en MongDB más de 835.000 documentos.

El tiempo total de carga de este archivo JSON no superó el minuto en mi ordenador, pero dependerá de cada uno de vuestros sistemas. Si vemos las horas desde que se conecta al localhost (16:02:25 ) y acaba importando los documentos (16:03:06), apenas ha tardado 41 segundos en cargarme esa cantidad de documentos.

2 comentarios en «Importar un array JSON en MongoDB con mongoimport en Linux»

Deja un comentario