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.
Quiero leer...
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»