Ответ 1
Вместо использования:
mongoimport -d DATABASE_NAME -c COLLECTION_NAME --file YOUR_JSON_FILE
используйте следующую команду:
mongoimport -d DATABASE_NAME -c COLLECTION_NAME --file YOUR_JSON_FILE --jsonArray
Я пытаюсь импортировать в файл MongoDB 70 mb json, который действителен. Но я получаю эту ошибку снова и снова в цикле:
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: ],
Мой JSON (только маленький пример из него) состоит из многих структур, подобных этому:
[
{
"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
}
},
....
....
....
}
]
это общий паттерн json:
[
{
"data": [
{
}
],
"paging": {
"previous": "link",
"next": "link"
}
},
"data": [
{
}
],
"paging": {
"previous": "link",
"next": "link"
}
},
"data": [
{
}
],
"paging": {
"previous": "link",
"next": "link"
}
}
]
Вместо использования:
mongoimport -d DATABASE_NAME -c COLLECTION_NAME --file YOUR_JSON_FILE
используйте следующую команду:
mongoimport -d DATABASE_NAME -c COLLECTION_NAME --file YOUR_JSON_FILE --jsonArray
В моем случае мой файл был на самом деле не слишком большим, поэтому сообщение об ошибке вводило в заблуждение. Мне пришлось либо поместить каждый документ в одну строку, либо использовать --jsonArray
.
Итак, либо измените файл, как:
{ "_id" : "xxxxxxxx", "foo" : "yyy", "bar" : "zzz" }
или измените команду импорта на
mongoimport -d [db_name] -c [col_name] --file [file_with_multi_lined_docs] --jsonArray
если мой файл находится в формате нескольких строк на документ
{
"_id" : "xxxxxxxx",
"foo" : "yyy",
"bar" : "zzz"
}
Ваш json файл содержит только список записей в поле data
? В этом случае вам нужно переформатировать ваш json файл в виде списка записей, например:
{
"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"
}
]
},
......
}
Просто отредактируйте несколько лидирующих/конечных строк, должно быть достаточно, если ваш json файл хорошо отформатирован.
EDIT. Вам может понадобиться опция --jsonArray
для импорта из действительного json файла. попробуйте
mongoimport --db DATABASE_NAME --collection COLLECTION_NAME --file YOUR_JSON_FILE --jsonArray
Проверьте версию mongo, у меня возникла проблема с тем, что я экспортировал json из mongo 2.6.1 и попытался импортировать на mongo ~ 2.4 после установки более высокой версии, которая сработала для меня...
В моем случае, столкнувшись с этой ошибкой, я обнаружил, что проблема заключалась в копировании и вставке данных с моего локального компьютера (в vim) на мой удаленный сервер (также vim). Когда я scp
'd, вместо этого он чудесным образом работал, поэтому не знаю, что изменилось при его копировании, особенно когда оно копировалось с Mac на Centos, поэтому никаких проблем с окончанием строки не было.
В заключение: использовать файл, который mongoexport
создает, а не его содержимое!