2013-03-02 2 views
78

У меня есть json-файл, состоящий примерно из 2000 записей. Каждая запись, которая будет соответствовать документу в базе данных Монго отформатирован следующим образом:Mongoimport of json file

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

Каждая запись в одной строке в файле формата JSON, а только имеются разрывы строк в конце каждой записи. Таким образом, каждая строка в документе начинается с «{JobId:» ... Я пытаюсь импортировать их в базу данных Монго с помощью следующей команды:

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

Однако, я получаю следующее сообщение об ошибке:

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 

Я не знаю, в чем проблема. Может кто-то порекомендовать решение?

ответ

147

я смог исправить ошибку с помощью следующего запроса:

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

Надеется, что это полезно для кого-то.

+13

' --jsonArray', являющийся билетом, да? – Dudo

+0

@Mallanaga Да, это тоже сработало для меня –

+0

Отлично, это именно то, что мне нужно. – Feanaro

33

попробовать это,

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

Пример,

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

Проблема из-за вас формат даты.

Я же JSON с измененной датой, как показано ниже, и она работала

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

надеюсь, что это помогает

+0

У меня такая же ошибка, как и в вопросе ... Проверял ли этот импорт? –

+0

Я скорректировал даты, как вы предложили, и это избавилось от этой конкретной ошибки. Однако теперь я получаю новый. Вот новая ошибка: – amber4478

+0

Можете ли вы вставить новый JSON и какую версию Mongo вы используете? –

0

Если вы пытаетесь экспортировать эту коллекцию тест:

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

с mongoexport (первая дата создана с Date(...), а вторая создана с new Date(...) (если использование ISODate(...) будет таким же, как и во втором линия)) так mongoexport вывод будет выглядеть следующим образом:

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

Таким образом, вы должны использовать то же обозначение, так как строгая JSON не имеет типа Date(<date>).

Также недействителен ваш JSON: все имена полей должны быть заключены в двойные кавычки, но mongoimport отлично работает без них.

Дополнительную информацию вы можете найти в mongodb documentation и here.

+0

Я скорректировал даты, как вы предлагали, и это избавилось от этой конкретной ошибки. Однако теперь я получаю новый. Ниже приведена новая ошибка: ' Сб Мар 2 15:22:07 Исключение: представление BSON поставляемого JSON слишком велико: Разбор строки JSON рядом: данные: «1949 Сб Мар 2 15:22:07 Сб Мар 2 15:22:07 импортировал 0 объектов Сб Мар 2 15:22:07 ОШИБКА: столкнулись с ошибками 34763 ' – amber4478

+0

Я думаю, что это еще одна ошибка, исправленная в поле 'sizeT: {data:" 1949 ... "}}' –

2

Ваш синтаксис выглядит вполне правильно:

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

Убедитесь, что вы находитесь в нужной папке или указать полный путь.

1

Эта команда работает там, где не задана коллекция.

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

Монго оболочки после выполнения команды

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 
14

консоль:

mongoimport -d dbName -c collectionName dataFile.js 
2

Я использовал следующую команду для экспорта DB

mongodump --db database_name --collection collection_name 

и ниже команда работала для меня для импорта DB

mongorestore --db database_name path_to_bson_file 
1

Использование mongoimport вы можете в состоянии достигнуть того же

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

где

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

--drop является падение сбора, если уже существует.

 Смежные вопросы

  • Нет связанных вопросов^_^