J'essaie d'importer dans MongoDB un fichier json de 70 mb qui est valide. Mais, je reçois cette erreur encore et encore dans une boucle:
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: ],
Mon JSON (seul petit exemple) contient beaucoup de structures comme celle-ci:
[
{
"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
}
},
....
....
....
}
]
c'est le patron général du json ":
[
{
"data": [
{
}
],
"paging": {
"previous": "link",
"next": "link"
}
},
"data": [
{
}
],
"paging": {
"previous": "link",
"next": "link"
}
},
"data": [
{
}
],
"paging": {
"previous": "link",
"next": "link"
}
}
]
À la place d'utiliser:
mongoimport -d DATABASE_NAME -c COLLECTION_NAME --file YOUR_JSON_FILE
utilisez la commande suivante:
mongoimport -d DATABASE_NAME -c COLLECTION_NAME --file YOUR_JSON_FILE --jsonArray
Dans mon cas, mon fichier n'était pas trop volumineux, le message d'erreur était donc trompeur. Je devais soit mettre chaque document sur une seule ligne ou utiliser --jsonArray
.
Alors changez le fichier comme ceci:
{ "_id" : "xxxxxxxx", "foo" : "yyy", "bar" : "zzz" }
ou changez la commande d'importation en
mongoimport -d [db_name] -c [col_name] --file [file_with_multi_lined_docs] --jsonArray
si mon fichier reste au format plusieurs lignes par document
{
"_id" : "xxxxxxxx",
"foo" : "yyy",
"bar" : "zzz"
}
Est-ce que votre fichier json contient uniquement une liste d'enregistrements dans le champ data
? Dans ce cas, vous devez reformater votre fichier json en tant que liste d'enregistrements, comme suit:
{
"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"
}
]
},
......
}
Il suffit d’éditer les quelques lignes de début/fin qui devraient suffire si votre fichier json est bien formaté.
EDIT: Vous aurez peut-être besoin de l'option --jsonArray
pour importer un fichier json valide. essayer
mongoimport --db DATABASE_NAME --collection COLLECTION_NAME --file YOUR_JSON_FILE --jsonArray
Dans mon cas, face à cette erreur, j'ai constaté que le problème venait du copier-coller des données de ma machine locale (sous vim) sur mon serveur distant (également vim). Lorsque je scp
'le traversais à la place, cela fonctionnait miraculeusement, donc je ne savais pas ce qui était changé lors de la copie, surtout dans le cas d’une copie de Mac vers Centos, donc pas de problèmes de fin de ligne.
En conclusion: utilisez le fichier créé par mongoexport
, pas son contenu!
Vérifiez la version de Mongo. Le problème, j’ai exporté JSON à partir de Mongo 2.6.1 et essayé d’importer sur un Mongo ~ 2.4, après avoir installé une version supérieure, cela a fonctionné pour moi ...