Mongoimport del file json


173

Ho un file json composto da circa 2000 dischi. Ogni record che corrisponderà a un documento nel database mongo è formattato come segue:

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

Ogni record si trova su una singola riga nel file JSON e le uniche interruzioni di riga si trovano alla fine di ogni record. Pertanto, ogni riga nel documento inizia con "{jobID:" ... Sto provando a importarli in un database mongo usando il seguente comando:

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

Tuttavia, ottengo il seguente errore:

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

Non so quale sia il problema. Qualcuno può raccomandare una soluzione?

Risposte:


301

Sono stato in grado di correggere l'errore utilizzando la seguente query:

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

Spero che questo sia utile a qualcuno.


28
--jsonArrayessendo il biglietto, sì?
Dudo,

4
Breve forma di questo mongoimport -d <database> -c <collection> --jsonArray -f <filename>.json.
Adam Faryna,

1
a volte sono richiesti utente / passwordmongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password
Diego Andrés Díaz Espinoza,

Aggiungendo al commento @ DiegoAndrésDíazEspinoza, che nel mio caso ho ricevuto un errore di "impossibile eseguire l'autenticazione utilizzando il meccanismo 'SCRAM-SHA-1'". Quindi, dopo una ricerca, ho scoperto che manca la parola chiave authenticationDatabasecome menzionato nella risposta stackoverflow.com/a/58067928/6791222 .
Feroz Khan,

61

prova questo,

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

Esempio,

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

Il problema è dovuto al formato della tua data.

Ho usato lo stesso JSON con data modificata come di seguito e ha funzionato

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

spero che questo ti aiuti


Ho lo stesso errore della domanda ... Hai controllato questa importazione?
Denis Nikanorov

Ho modificato le date come mi hai suggerito e questo mi ha liberato di quel particolare errore. Tuttavia, ora ne sto ottenendo uno nuovo. Ecco il nuovo errore:
amber4478

Riesci a incollare il nuovo JSON e su quale versione di Mongo ti trovi?
Srivatsa N,

Sono stato in grado di correggere l'errore aggiungendo --jsonArray alla fine della query.
ambra4478

È necessario utilizzare ""intorno a .json, se contiene il nome della cartella che contiene spazi. Risposta di Abhi in basso Per esempio Questo non funzionerà, è necessario aggiungere ""alla posizione del file json per importarlo. D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json The system cannot find the file specified. Funziona così 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 puoi ottenere lo stesso

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

dove,

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

--drop è eliminare la raccolta se già esiste.


20

console:

mongoimport -d dbName -c collectionName dataFile.js 

6

Ho usato sotto il comando per esportare DB

mongodump --db database_name --collection collection_name

e sotto il comando ha funzionato per me per importare DB

mongorestore --db database_name path_to_bson_file

6

La sintassi appare completamente corretta in:

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

Assicurarsi di essere nella cartella corretta o fornire il percorso completo.


3

Esegui il comando di importazione in un altro terminale. (non all'interno del guscio di mongo.)

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

3

In Windows puoi usare il tuo Command Prompcmd cmd, in Ubuntu puoi usare il tuo terminaldigitando il seguente comando:

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

quindi quando apri la tua shell mongo, troverai che controlla il tuo database_name quando esegui questo comando:

show databases

2

Questo comando funziona dove non è stata specificata alcuna raccolta.

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

Mongo shell dopo aver eseguito il 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

1

Ho provato qualcosa del genere e funziona davvero:

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

1

Questo funziona con me quando db con nome utente e password

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

db senza password nome utente, rimuovere -u my_user -p my_pass

Il mio campione JSON

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

1

Soluzione:-

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

Esempio:-

Inserisci il tuo file nella cartella admin: -

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

Esegui questo comando sul tuo teminale: -

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

Produzione:-

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

Per più link


1
  1. Basta copiare il percorso del file json come nell'esempio "C: \ persons.json"
  2. vai su C: \ Programmi \ MongoDB \ Server \ 4.2 \ bin
  3. apri cmd su quella cartella bin di mongodb ed esegui questo comando

mongoimport --jsonArray --db dbname - collection collectionName - file FilePath

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


0

Se si tenta di esportare questa raccolta di test:

> 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 prima data creata con Date(...)e la seconda creata con new Date(...)(se l'uso ISODate(...)sarà lo stesso della seconda riga)), quindi l'output di mongoexport sarà simile al seguente:

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

Quindi dovresti usare la stessa notazione, perché JSON rigoroso non ha tipo Date( <date> ).

Anche il tuo JSON non è valido: il nome di tutti i campi deve essere racchiuso tra virgolette doppie, ma mongoimport funziona bene senza di esse.

Puoi trovare ulteriori informazioni nella documentazione di mongodb e qui .


Ho modificato le date come mi hai suggerito e questo mi ha liberato di quel particolare errore. Tuttavia, ora ne sto ottenendo uno nuovo. Ecco il nuovo errore: 'sabato 2 marzo 15:22:07 eccezione: rappresentazione BSON del JSON fornito è troppo grande: errore durante l'analisi della stringa JSON vicino: dati: "1949 sabato 2 marzo 15:22:07 sabato 2 marzo 15:22 : 07 importati 0 oggetti Sab Mar 2 15:22:07 ERRORE: trovati errori
34763

Penso che sia un altro errore riportato sul camposizeT:{data: "1949..."}}
Denis Nikanorov

0

Un po 'in ritardo per una probabile risposta, potrebbe aiutare le nuove persone. Nel caso abbiate più istanze di database:

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

Supponendo che siano necessarie le credenziali, in caso contrario rimuovere questa opzione.


0

Numero di risposte dato anche se vorrei dare il mio comando. Lo facevo spesso. Potrebbe aiutare qualcuno.

mongoimport original.json -d databaseName -c yourcollectionName --jsonArray --drop
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.