Ich versuche in die MongoDB 70 MB Json-Datei zu importieren, die gültig ist. Aber ich bekomme diesen Fehler immer und immer wieder in einer Schleife:
01 11:42:20 exception:BSON representation of supplied JSON is too large: Failure parsing JSON string near: "name": "L
01 11:42:20
01 11:42:20 Assertion: 10340:Failure parsing JSON string near: "link": "h
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 kernel32.dll BaseThreadInitThunk+0x12
01 11:42:20 ntdll.dll RtlInitializeExceptionChain+0xef
01 11:42:20 exception:BSON representation of supplied JSON is too large: Failure parsing JSON string near: "link": "h
01 11:42:20
01 11:42:20 Assertion: 10340:Failure parsing JSON string near: }
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 kernel32.dll BaseThreadInitThunk+0x12
01 11:42:20 ntdll.dll RtlInitializeExceptionChain+0xef
01 11:42:20 exception:BSON representation of supplied JSON is too large: Failure parsing JSON string near: }
01 11:42:20
01 11:42:20 Assertion: 10340:Failure parsing JSON string near: ],
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 mongoimport.exe ???
01 11:42:20 kernel32.dll BaseThreadInitThunk+0x12
01 11:42:20 ntdll.dll RtlInitializeExceptionChain+0xef
01 11:42:20 exception:BSON representation of supplied JSON is too large: Failure parsing JSON string near: ],
Mein JSON (nur ein kleines Beispiel davon) besteht aus vielen Strukturen wie dieser:
[
{
"data": [
"id": "xxxxxxxxxxxxxxxxxx",
"from": {
"name": "yyyyyyyyyyy",
"id": "1111111111111"
},
"to": {
"data": [
{
"version": 1,
"name": "1111111111111",
"id": "1111111111111"
}
]
},
"picture": "fffffffffffffffffffffff.jpg",
"link": "http://www.youtube.com/watch?v=qqqqqqqqqqqqq",
"source": "http://www.youtube.com/v/qqqqqqqqqqqqq?version=3&autohide=1&autoplay=1",
"name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"description": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...",
"icon": "http://static.ak.fbcdn.net/rsrc.php/v2/xxx/r/dddd",
"actions": [
{
"name": "Comment",
"link": "http://www.example.com/1111111111111/posts/1111111111111"
},
{
"name": "Like",
"link": "http://www.example.com/1111111111111/posts/1111111111111"
}
],
"privacy": {
"value": ""
},
"type": "video",
"created_time": 1356953890,
"updated_time": 1356953890,
"likes": {
"data": [
{
"name": "jjj ",
"id": "59xxx67"
},
{
"name": "xxxxx",
"id": "79xxx27"
}
],
"count": 2
},
"comments": {
"count": 0
}
},
....
....
....
}
]
dies ist das allgemeine Muster der Json ":
[
{
"data": [
{
}
],
"paging": {
"previous": "link",
"next": "link"
}
},
"data": [
{
}
],
"paging": {
"previous": "link",
"next": "link"
}
},
"data": [
{
}
],
"paging": {
"previous": "link",
"next": "link"
}
}
]
Anstelle von:
mongoimport -d DATABASE_NAME -c COLLECTION_NAME --file YOUR_JSON_FILE
verwenden Sie den folgenden Befehl:
mongoimport -d DATABASE_NAME -c COLLECTION_NAME --file YOUR_JSON_FILE --jsonArray
In meinem Fall war meine Datei eigentlich nicht zu groß, daher war die Fehlermeldung irreführend. Ich musste jedes Dokument entweder in eine einzige Zeile schreiben oder --jsonArray
verwenden.
Also entweder die Datei ändern wie:
{ "_id" : "xxxxxxxx", "foo" : "yyy", "bar" : "zzz" }
oder ändern Sie den Importbefehl in
mongoimport -d [db_name] -c [col_name] --file [file_with_multi_lined_docs] --jsonArray
wenn meine Datei im mehrzeiligen Format pro Dokument bleibt
{
"_id" : "xxxxxxxx",
"foo" : "yyy",
"bar" : "zzz"
}
Enthält Ihre Json-Datei nur eine Liste von Datensätzen im Feld data
? In diesem Fall müssen Sie Ihre Json-Datei als Liste von Datensätzen wie folgt neu formatieren:
{
"id": "xxxxxxxxxxxxxxxxxx",
"from": {
"name": "yyyyyyyyyyy",
"id": "1111111111111"
},
"to": {
"data": [
{
"version": 1,
"name": "1111111111111",
"id": "1111111111111"
}
]
},
......
}
{
"id": "xxxxxxxxxxxxxxxxxx",
"from": {
"name": "yyyyyyyyyyy",
"id": "1111111111111"
},
"to": {
"data": [
{
"version": 1,
"name": "1111111111111",
"id": "1111111111111"
}
]
},
......
}
Wenn Sie Ihre Json-Datei gut formatiert haben, reicht es aus, die ein paar Anfangs-/Endzeilen zu bearbeiten.
EDIT: Möglicherweise benötigen Sie die Option --jsonArray
, um aus einer gültigen Json-Datei zu importieren. Versuchen
mongoimport --db DATABASE_NAME --collection COLLECTION_NAME --file YOUR_JSON_FILE --jsonArray
In meinem Fall, als ich mit diesem Fehler konfrontiert wurde, stellte ich fest, dass das Problem darin bestand, die Daten von meinem lokalen Computer (in vim) auf meinen Remote-Server (ebenfalls vim) zu kopieren und einzufügen. Wenn ich scp
'd stattdessen stattdessen änderte, funktionierte es auf wundersame Weise, also keine Ahnung, was geändert wurde, als es kopiert wurde, vor allem, weil es von Mac nach Centos kopiert wurde.
Zusammenfassend: Verwenden Sie die Datei, die mongoexport
erstellt, nicht deren Inhalt!
Überprüfen Sie die Version von Mongo. Ich hatte das Problem, dass ich Json aus Mongo 2.6.1 exportierte und versuchte, einen Mongo ~ 2.4 zu importieren. Nach der Installation einer höheren Version funktionierte es für mich ...