Mongoimport der JSON-Datei


173

Ich habe eine JSON-Datei, die aus ungefähr 2000 Datensätzen besteht. Jeder Datensatz, der einem Dokument in der Mongo-Datenbank entspricht, ist wie folgt formatiert:

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

Jeder Datensatz befindet sich in der JSON-Datei in einer einzelnen Zeile, und die einzigen Zeilenumbrüche befinden sich am Ende jedes Datensatzes. Daher beginnt jede Zeile im Dokument mit "{jobID:" ... Ich versuche, diese mit dem folgenden Befehl in eine Mongo-Datenbank zu importieren:

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

Ich erhalte jedoch den folgenden Fehler:

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

Ich weiß nicht, wo das Problem liegt. Kann jemand eine Lösung empfehlen?

Antworten:


301

Ich konnte den Fehler mit der folgenden Abfrage beheben:

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

Hoffentlich ist das für jemanden hilfreich.


28
--jsonArraydas Ticket sein, ja?
Dudo

4
Kurzform davon mongoimport -d <database> -c <collection> --jsonArray -f <filename>.json.
Adam Faryna

1
manchmal sind Benutzer / Passwort erforderlichmongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password
Diego Andrés Díaz Espinoza

Beim Hinzufügen zu @ DiegoAndrésDíazEspinoza wurde in meinem Fall der Fehler "Authentifizierung mit dem Mechanismus 'SCRAM-SHA-1' nicht möglich" angezeigt. Nach einer Suche stellte ich fest, dass das Schlüsselwort fehlt, authenticationDatabasewie in der Antwort stackoverflow.com/a/58067928/6791222 erwähnt .
Feroz Khan

61

Versuche dies,

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

Beispiel,

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

Das Problem liegt an Ihrem Datumsformat.

Ich habe das gleiche JSON mit dem unten angegebenen Änderungsdatum verwendet und es hat funktioniert

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

hoffe das hilft


Ich habe den gleichen Fehler wie in der Frage ... Hat dieser Import überprüft?
Denis Nikanorov

Ich habe die Daten so angepasst, wie Sie es vorgeschlagen haben, und das hat diesen speziellen Fehler beseitigt. Jetzt bekomme ich jedoch eine neue. Hier ist der neue Fehler:
amber4478

Können Sie den neuen JSON einfügen und welche Version von Mongo verwenden Sie?
Srivatsa N

Ich konnte den Fehler beheben, indem ich --jsonArray am Ende der Abfrage hinzufügte.
Amber4478

Muss ""um das verwendet werden .json, wenn es Ordnernamen enthält, enthält Leerzeichen. Beantwortet von Abhi unten Für zB Dies funktioniert nicht, muss zum ""json-Dateispeicherort hinzugefügt werden , um es zu importieren. D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json The system cannot find the file specified. Dies funktioniert 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

Mit mongoimport können Sie dasselbe erreichen

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

wo,

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

--drop ist die Sammlung löschen, wenn bereits vorhanden.


20

Konsole:

mongoimport -d dbName -c collectionName dataFile.js 

6

Ich habe den folgenden Befehl für den Export der Datenbank verwendet

mongodump --db database_name --collection collection_name

und unten Befehl funktionierte für mich, um DB zu importieren

mongorestore --db database_name path_to_bson_file

6

Ihre Syntax erscheint völlig korrekt in:

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

Stellen Sie sicher, dass Sie sich im richtigen Ordner befinden, oder geben Sie den vollständigen Pfad an.


3

Führen Sie den Importbefehl in einem anderen Terminal aus. (Nicht in der Mongo-Muschel.)

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

3

In Windows können Sie Ihren Befehl Prompcmd verwenden cmd, in Ubuntu können Sie Ihren Befehl eingeben , terminalindem Sie den folgenden Befehl eingeben:

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

Wenn Sie dann Ihre Mongo-Shell öffnen, werden Sie feststellen, dass Sie Ihren Datenbanknamen überprüfen müssen, wenn Sie diesen Befehl ausführen:

show databases

2

Dieser Befehl funktioniert, wenn keine Sammlung angegeben ist.

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

Mongo-Shell nach Ausführung des Befehls

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

Ich habe so etwas versucht und es funktioniert tatsächlich:

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

1

Dies funktioniert bei mir bei db mit usrname und passwort

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

Datenbank ohne Benutzername Passwort bitte entfernen -u my_user -p my_pass

Mein Beispiel json

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

1

Lösung:-

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

Beispiel:-

Legen Sie Ihre Datei im Administratorordner ab: -

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

Führen Sie diesen Befehl auf Ihrem Teminal aus: -

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

Ausgabe:-

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

Für mehr Link


0

Wenn Sie versuchen, diese Testsammlung zu exportieren:

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

mit mongoexport (das erste Datum, mit Date(...)dem erstellt wurde, und das zweite, mit dem erstellt wurde new Date(...)(wenn die Verwendung ISODate(...)mit der in der zweiten Zeile identisch ist)) sieht die Ausgabe von mongoexport folgendermaßen aus:

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

Sie sollten also dieselbe Notation verwenden, da striktes JSON keinen Typ hat Date( <date> ).

Auch Ihr JSON ist ungültig: Alle Feldnamen müssen in doppelte Anführungszeichen gesetzt werden, aber mongoimport funktioniert ohne sie einwandfrei.

Weitere Informationen finden Sie in der Mongodb- Dokumentation und hier .


Ich habe die Daten so angepasst, wie Sie es vorgeschlagen haben, und das hat diesen speziellen Fehler beseitigt. Jetzt bekomme ich jedoch eine neue. Hier ist der neue Fehler: 'Sat Mar 2 15:22:07 Ausnahme: BSON-Darstellung des bereitgestellten JSON ist zu groß: Fehler beim Parsen der JSON-Zeichenfolge in der Nähe von: data: "1949 Sat Mar 2 15:22:07 Sat Mar 2 15:22 : 07 importiert 0 Objekte Sa Mar 2 15:22:07 FEHLER: 34763 Fehler aufgetreten '
amber4478

Ich denke, es ist ein weiterer Fehler, der auf Feld zurückgewiesen wurdesizeT:{data: "1949..."}}
Denis Nikanorov

0

Ein bisschen zu spät für eine wahrscheinliche Antwort, könnte neuen Leuten helfen. Falls Sie mehrere Datenbankinstanzen haben:

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

Angenommen, Anmeldeinformationen werden benötigt, andernfalls entfernen Sie diese Option.


0
  1. Kopieren Sie einfach den Pfad der JSON-Datei wie im Beispiel "C: \ personen.json".
  2. Gehen Sie zu C: \ Programme \ MongoDB \ Server \ 4.2 \ bin
  3. Öffnen Sie cmd in diesem mongodb bin-Ordner und führen Sie diesen Befehl aus

mongoimport --jsonArray --db Datenbankname - Sammlung collectionName - Datei FilePath

Beispiel mongoimport --jsonArray --db learnmongo - Sammlung Personen - Datei C: \ Personen.json


0

Die Anzahl der Antworten wurde angegeben, obwohl ich meinen Befehl erteilen möchte. Ich habe es oft getan. Es kann jemandem helfen.

mongoimport original.json -d databaseName -c yourcollectionName --jsonArray --drop
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.