Монгоимпорт из файла json

173

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

{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

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

amber4478
источник

Ответы:

301

Мне удалось исправить ошибку, используя следующий запрос:

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

Надеюсь, это кому-нибудь пригодится.

amber4478
источник
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
Диего Андрес Диас Эспиноза
Добавление к комментарию @ 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 вы используете?
Сриваца Н
Я смог исправить ошибку, добавив --jsonArray в конец запроса.
amber4478
Необходимо использовать ""во всем .json, если оно содержит имя папки с пробелами. Ответ Abhi ниже. Например, это не сработает, необходимо добавить ""его в расположение файла 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
Abhijeet
22

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

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

где,

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

--drop удалить коллекцию, если она уже существует.

KARTHIKEYAN.A
источник
20

приставка:

mongoimport -d dbName -c collectionName dataFile.js 
Андрей
источник
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
Nija I Pillai
источник
3

В Windows вы можете использовать командную строку 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

Это работает со мной, когда БД с именем пользователя и паролем

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

БД без имени пользователя, пароль, пожалуйста, удалите -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: \ people.json"
  2. перейдите в C: \ Program Files \ MongoDB \ Server \ 4.2 \ bin
  3. откройте cmd в этой папке bin mongodb и выполните эту команду

mongoimport --jsonArray --db dbname - коллекция collectionName - файл FilePath

пример mongoimport --jsonArray --db learnmongo --коллекция лиц --файл C: \ people.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(...)будет таким же, как во второй строке)), поэтому вывод 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 и здесь .

Денис Никаноров
источник
Я скорректировал даты, как вы предложили, и это избавило от этой конкретной ошибки. Однако сейчас я получаю новый. Вот новая ошибка: «Сб. 2 марта 15:22:07 исключение: представление BSON предоставленного JSON слишком велико: сбой при разборе строки JSON рядом: data:" 1949 сб. 2 марта 15:22:07 сб. 2 марта 15:22 : 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>

Предполагая, что необходимы учетные данные, в противном случае удалите эту опцию.

coolmego
источник
0

Количество ответов было дано, хотя я хотел бы дать мою команду. Я привык часто. Это может помочь кому-то.

mongoimport original.json -d databaseName -c yourcollectionName --jsonArray --drop
Прамод Хараде
источник