Mongoimport de archivo json

173

Tengo un archivo json que consta de aproximadamente 2000 registros. Cada registro que corresponderá a un documento en la base de datos mongo tiene el siguiente formato:

{jobID:"2597401",
account:"XXXXX",
user:"YYYYY",
pkgT:{"pgi/7.2-5":{libA:["libpgc.so"],flavor:["default"]}},     
startEpoch:"1338497979",
runTime:"1022",
execType:"user:binary",
exec:"/share/home/01482/XXXXX/appker/ranger/NPB3.3.1/NPB3.3-MPI/bin/ft.D.64",
numNodes:"4",
sha1:"5a79879235aa31b6a46e73b43879428e2a175db5",
execEpoch:1336766742,
execModify: new Date("Fri May 11 15:05:42 2012"),
startTime: new Date("Thu May 31 15:59:39 2012"),
numCores:"64",
sizeT:{bss:"1881400168",text:"239574",data:"22504"}},

Cada registro está en una sola línea en el archivo JSON, y los únicos saltos de línea están al final de cada registro. Por lo tanto, cada línea en el documento comienza con "{jobID:" ... Estoy tratando de importarlos en una base de datos mongo usando el siguiente comando:

mongoimport --db dbName --collection collectionName --file fileName.json

Sin embargo, me sale el siguiente error:

Sat Mar  2 01:26:12 Assertion: 10340:Failure parsing JSON string near: ,execModif
0x10059f12b 0x100562d5c 0x100562e9c 0x10025eb98 0x10000e643 0x100010b60 0x10055c4cc 0x1000014b7    
0x100001454 
 0   mongoimport                         0x000000010059f12b _ZN5mongo15printStackTraceERSo + 43
 1   mongoimport                         0x0000000100562d5c _ZN5mongo11msgassertedEiPKc + 204
 2   mongoimport                         0x0000000100562e9c _ZN5mongo11msgassertedEiRKSs + 12
 3   mongoimport                         0x000000010025eb98 _ZN5mongo8fromjsonEPKcPi + 1576
 4   mongoimport                         0x000000010000e643          
                                         _ZN6Import8parseRowEPSiRN5mongo7BSONObjERi + 2739
 5   mongoimport                         0x0000000100010b60 _ZN6Import3runEv + 7376
 6   mongoimport                         0x000000010055c4cc _ZN5mongo4Tool4mainEiPPc + 5436
 7   mongoimport                         0x00000001000014b7 main + 55
 8   mongoimport                         0x0000000100001454 start + 52
Sat Mar  2 01:26:12 exception:BSON representation of supplied JSON is too large: Failure parsing    
    JSON string near: ,execModif
Sat Mar  2 01:26:12 
Sat Mar  2 01:26:12 imported 0 objects
Sat Mar  2 01:26:12 ERROR: encountered 1941 errors

No sé cuál es el problema. ¿Alguien puede recomendar una solución?

amber4478
fuente

Respuestas:

301

Pude corregir el error usando la siguiente consulta:

mongoimport --db dbName --collection collectionName --file fileName.json --jsonArray

Esperemos que esto sea útil para alguien.

amber4478
fuente
28
--jsonArraysiendo el boleto, si?
Dudo
44
Forma corta de esto mongoimport -d <database> -c <collection> --jsonArray -f <filename>.json.
Adam Faryna
1
a veces se requiere usuario / contraseñamongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password
Diego Andrés Díaz Espinoza
Agregando al comentario de @ DiegoAndrésDíazEspinoza, que en mi caso recibí un error de "no se puede autenticar usando el mecanismo 'SCRAM-SHA-1'". Entonces, después de una búsqueda, descubrí que falta la palabra clave authenticationDatabasecomo se menciona en la respuesta stackoverflow.com/a/58067928/6791222 .
Feroz Khan
61

prueba esto,

mongoimport --db dbName --collection collectionName <fileName.json

Ejemplo,

mongoimport --db foo --collection myCollections < /Users/file.json
connected to: *.*.*.*
Sat Mar  2 15:01:08 imported 11 objects

El problema se debe a su formato de fecha.

Usé el mismo JSON con la fecha modificada que se muestra a continuación y funcionó

{jobID:"2597401",
account:"XXXXX",
user:"YYYYY",
pkgT:{"pgi/7.2-5":{libA:["libpgc.so"],flavor:["default"]}},     
startEpoch:"1338497979",
runTime:"1022",
execType:"user:binary",
exec:"/share/home/01482/XXXXX/appker/ranger/NPB3.3.1/NPB3.3-MPI/bin/ft.D.64",
numNodes:"4",
sha1:"5a79879235aa31b6a46e73b43879428e2a175db5",
execEpoch:1336766742,
execModify:{"$date" : 1343779200000},
startTime:{"$date" : 1343779200000},
numCores:"64",
sizeT:{bss:"1881400168",text:"239574",data:"22504"}}

espero que esto ayude

Srivatsa N
fuente
Tengo el mismo error que en la pregunta ... ¿Verificó esta importación?
Denis Nikanorov
Ajusté las fechas como sugirió y eso eliminó ese error en particular. Sin embargo, ahora recibo uno nuevo. Aquí está el nuevo error:
amber4478
¿Puedes pegar el nuevo JSON y en qué versión de Mongo estás?
Srivatsa N
Pude corregir el error agregando --jsonArray al final de la consulta.
amber4478
Debe usar ""alrededor del .json, si contiene el nombre de la carpeta tiene espacios. Respondido por Abhi a continuación. Por ejemplo, Esto no funcionará, necesita agregarlo ""a la ubicación del archivo json para importarlo. D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json The system cannot find the file specified. Esto funciona D:\>mongoimport --db testimport --collection small_zip < "D:\Dev\test test\small_zips.json" 2016-04-17T18:32:34.328+0800 connected to: localhost 2016-04-17T18:32:34.610+0800 imported 200 documents
Abhijeet
22

Usando mongoimport puedes lograr lo mismo

mongoimport --db test --collection user --drop --file ~/downloads/user.json

dónde,

test - Database name
user - collection name
user.json - dataset file

--drop es soltar la colección si ya existe.

KARTHIKEYAN.A
fuente
20

consola:

mongoimport -d dbName -c collectionName dataFile.js 
Andrey
fuente
6

He utilizado el siguiente comando para exportar DB

mongodump --db database_name --collection collection_name

y el siguiente comando funcionó para mí para importar DB

mongorestore --db database_name path_to_bson_file
Ravi Hirani
fuente
6

Su sintaxis parece completamente correcta en:

mongoimport --db dbName --collection collectionName --file fileName.json

Asegúrese de estar en la carpeta correcta o proporcione la ruta completa.

Robert Grutza
fuente
3

Ejecute el comando de importación en otra terminal. (no dentro de mongo shell)

mongoimport --db test --collection user --drop --file ~/downloads/user.json
Nija I Pillai
fuente
3

En Windows puedes usar tu Command Prompcmd cmd, en Ubuntu puedes usar tu terminalescribiendo el siguiente comando:

mongoimport  -d  your_database_name  -c  your_collection_name  /path_to_json_file/json_file_name.json

luego, cuando abra su shell mongo, encontrará que verifique su nombre_de_base_datos cuando ejecute este comando:

show databases
Noha Salah
fuente
2

Este comando funciona donde no se especifica ninguna colección.

mongoimport --db zips "\MongoDB 2.6 Standard\mongodb\zips.json"

Mongo shell después de ejecutar el comando

connected to: 127.0.0.1
no collection specified!
using filename 'zips' as collection.
2014-09-16T13:56:07.147-0400 check 9 29353
2014-09-16T13:56:07.148-0400 imported 29353 objects
Abhi
fuente
1

Intenté algo como esto y realmente funciona:

mongoimport --db dbName --file D:\KKK\NNN\100YWeatherSmall.data.json
Tyne
fuente
1

Esto funciona conmigo cuando db con usrname y contraseña

mongoimport --db YOUR_DB --collection MyCollection --file /your_path/my_json_file.json -u my_user -p my_pass

db sin nombre de usuario contraseña por favor elimine -u my_user -p my_pass

Mi muestra json

{ 
    "_id" : ObjectId("5d11c815eb946a412ecd677d"), 
    "empid" : NumberInt(1), 
    "name" : "Rahul"
}
{ 
    "_id" : ObjectId("5d11c815eb946a412ecd677e"), 
    "empid" : NumberInt(2), 
    "name" : "Rahul"
}
Rahul Mahadik
fuente
1

Solución:-

mongoimport --db databaseName --collection tableName --file filepath.json

Ejemplo:-

Coloque su archivo en la carpeta de administración: -

C:\Users\admin\tourdb\places.json

Ejecute este comando en su terminal: -

mongoimport --db tourdb --collection places --file ~/tourdb/places.json

Salida:-

admin@admin-PC MINGW64 /
$ mongoimport --db tourdb --collection places --file ~/tourdb/places.json
2019-08-26T14:30:09.350+0530 connected to: localhost
2019-08-26T14:30:09.447+0530 imported 10 documents

Para más enlace

Parveen Chauhan
fuente
1
  1. Simplemente copie la ruta del archivo json como ejemplo "C: \ persons.json"
  2. vaya a C: \ Archivos de programa \ MongoDB \ Server \ 4.2 \ bin
  3. abra cmd en esa carpeta bin mongodb y ejecute este comando

mongoimport --jsonArray --db dbname - colección collectionName - archivo FilePath

ejemplo mongoimport --jsonArray --db learnmongo --collection persons --file C: \ persons.json

Hrishikesh Baidya
fuente
0

Si intenta exportar esta colección de prueba:

> db.test.find()
{ "_id" : ObjectId("5131c2bbfcb94ddb2549d501"), "field" : "Sat Mar 02 2013 13:13:31 GMT+0400"}
{"_id" : ObjectId("5131c2d8fcb94ddb2549d502"), "field" : ISODate("2012-05-31T11:59:39Z")}

con mongoexport (la primera fecha creada con Date(...)y la segunda creada con new Date(...)(si el uso ISODate(...)será el mismo que en la segunda línea)) para que la salida de mongoexport se vea así:

{ "_id" : { "$oid" : "5131c2bbfcb94ddb2549d501" }, "field" : "Sat Mar 02 2013 13:13:31 GMT+0400" }
{ "_id" : { "$oid" : "5131c2d8fcb94ddb2549d502" }, "field" : { "$date" : 1338465579000 } }

Por lo tanto, debe usar la misma notación, porque JSON estricto no tiene tipo Date( <date> ).

Además, su JSON no es válido: el nombre de todos los campos debe estar entre comillas dobles, pero mongoimport funciona bien sin ellos.

Puede encontrar información adicional en la documentación de mongodb y aquí .

Denis Nikanorov
fuente
Ajusté las fechas como sugirió y eso eliminó ese error en particular. Sin embargo, ahora recibo uno nuevo. Aquí está el nuevo error: 'Sat Mar 2 15:22:07 excepción: BSON representación de JSON suministrado es demasiado grande: Error al analizar la cadena JSON cerca: datos: "1949 Sat Mar 2 15:22:07 Sat Mar 2 15:22 : 07 importó 0 objetos sáb Mar 2 15:22:07 ERROR: encontró 34763 errores '
amber4478
Creo que es otro error que se retiró al camposizeT:{data: "1949..."}}
Denis Nikanorov el
0

Un poco tarde para una respuesta probable, podría ayudar a las personas nuevas. En caso de que tenga varias instancias de base de datos:

mongoimport --host <host_name>:<host_port> --db <database_name> --collection <collection_name>  --file <path_to_dump_file> -u <my_user> -p <my_pass>

Asumiendo las credenciales necesarias, de lo contrario, elimine esta opción.

coolmego
fuente
0

Se han dado varias respuestas a pesar de que me gustaría dar el comando mío. Yo solía hacerlo con frecuencia. Puede ayudar a alguien.

mongoimport original.json -d databaseName -c yourcollectionName --jsonArray --drop
Pramod Kharade
fuente