Монгоімпорт файлу json


173

У мене є файл json, що складається з приблизно 2000 записів. Кожен запис, який буде відповідати документу в базі даних mongo, форматується таким чином:

{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:" ... Я намагаюся імпортувати їх у базу даних mongo за допомогою наступної команди:

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

Я не знаю, в чому проблема. Може хтось порекомендує рішення?

Відповіді:


301

Мені вдалося виправити помилку за допомогою наступного запиту:

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

Сподіваємось, це комусь корисно.


28
--jsonArrayбудучи квитком, так?
Дудо

4
Коротка форма цього mongoimport -d <database> -c <collection> --jsonArray -f <filename>.json.
Адам Фарина

1
інколи потрібні користувач / парольmongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password
Diego Andrés Díaz Espinoza

Додавши до коментаря @ DiegoAndrésDíazEspinoza, що в моєму випадку я отримав помилку "не в змозі перевірити автентифікацію за допомогою механізму" SCRAM-SHA-1 "". Отже, після пошуку я виявив, що в ньому відсутнє ключове слово, authenticationDatabaseяк зазначено у відповіді stackoverflow.com/a/58067928/6791222 .
Фероз Хан

61

спробуйте це,

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

сподіваюся, що це допомагає


У мене така ж помилка, як у питанні ... Чи перевірив цей імпорт?
Денис Ніканоров

Я скоригував дати, як ви запропонували, і це позбулося цієї конкретної помилки. Однак зараз я отримую новий. Ось нова помилка:
amber4478

Чи можете ви вставити новий JSON і в якій версії Mongo ви працюєте?
Сріваца N

Мені вдалося виправити помилку, додавши --jsonArray в кінець запиту.
amber4478

Необхідно використовувати ""навколо .json, якщо ім'я папки містить пробіли. Відповів Абхі нижче. Наприклад, це не спрацює, потрібно ""імпортувати його до json-файлу. D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json The system cannot find the file specified. Це працює 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
Абхієет

22

Використовуючи mongoimport, ви можете досягти того ж

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

де,

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

--drop це скинути колекцію, якщо вона вже існує.



6

Я використовував команду нижче для експорту БД

mongodump --db database_name --collection collection_name

і нижче команда працювала на імпорт БД

mongorestore --db database_name path_to_bson_file

6

Ваш синтаксис видається повністю правильним у:

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

Переконайтеся, що ви знаходитесь у правильній папці або вкажіть повний шлях.


3

Запустіть команду імпорту в інший термінал. (не всередині оболонки монго.)

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

3

У Windows можна використовувати ваш Command Prompcmd cmd, в Ubuntu ви можете використовувати свою terminal, ввівши таку команду:

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

тоді, коли ви відкриєте свою оболонку mongo, ви побачите, щоб перевірити своє ім'я бази даних при виконанні цієї команди:

show databases

2

Ця команда працює там, де не вказана колекція.

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

1

Я спробував щось подібне, і це насправді працює:

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

1

Це працює зі мною, коли db з usrname та паролем

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

db без пароля користувача, будь ласка, видаліть -u my_user -p my_pass

Мій зразок json

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

1

Рішення: -

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

Приклад: -

Помістіть свій файл у папку адміністратора: -

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

Виконайте цю команду на тимчасовому: -

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

Вихід: -

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

Для отримання додаткового посилання


1
  1. Просто скопіюйте шлях до файлу json, наприклад приклад "C: \ person.json"
  2. перейдіть до C: \ Program Files \ MongoDB \ Server \ 4.2 \ bin
  3. відкрийте cmd у папці bin mongodb та запустіть цю команду

mongoimport --jsonArray - db dbname - колекція колекціїName - файл FilePath

приклад mongoimport --jsonArray --db learnmongo --колекції осіб --файл C: \ person.json


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(...)буде такою ж, як у другому рядку)), тож результат монгоекспорту буде виглядати приблизно так:

{ "_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 та тут .


Я скоригував дати, як ви запропонували, і це позбулося цієї конкретної помилки. Однак зараз я отримую новий. Ось нова помилка: "Виняток сб. 2 березня 15:22:07 Виключення: представлення BSON наданого JSON занадто велике: Аналіз розбору рядка JSON поблизу: дані:" 1949 сб. 2 березня 15:22:07 сб. : 07 імпортовано 0 об’єктів Сб Березень 2 15:22:07 ПОМИЛКА: зіткнулися 34763 помилки '
amber4478

Я думаю, що це ще одна помилка, пов’язана з полемsizeT:{data: "1949..."}}
Денис Ніканоров

0

Трохи запізнюючись на ймовірну відповідь, може допомогти новим людям. Якщо у вас є кілька примірників бази даних:

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

Якщо припустити необхідні облікові дані, інакше видаліть цю опцію.


0

Кількість відповідей було дано, хоча я хотів би дати команду. Я часто бував. Це може комусь допомогти.

mongoimport original.json -d databaseName -c yourcollectionName --jsonArray --drop
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.