Монгоимпорт из файла json
У меня есть файл 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
Я не знаю в чем проблема. Кто-то может порекомендовать решение?
22 ответа
Мне удалось исправить ошибку, используя следующий запрос:
mongoimport --db dbName --collection collectionName --file fileName.json --jsonArray
Надеюсь, это кому-нибудь пригодится.
Попробуй это,
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"}}
надеюсь это поможет
Используя mongoimport вы можете добиться того же
mongoimport --db test --collection user --drop --file ~/downloads/user.json
где,
test - Database name
user - collection name
user.json - dataset file
--drop
удалить коллекцию, если она уже существует.
Приставка:
mongoimport -d dbName -c collectionName dataFile.js
Ваш синтаксис выглядит полностью правильным в:
mongoimport --db dbName --collection collectionName --file fileName.json
Убедитесь, что вы находитесь в правильной папке или укажите полный путь.
Я использовал ниже команду для экспорта БД
mongodump --db database_name --collection collection_name
и ниже у меня работала команда импортировать БД
mongorestore --db database_name path_to_bson_file
Импортировать файл JSON / CSV в MongoDB
- Подожди подожди
- сначала проверьте файл mongoimport.exe в папке bin(C: \ Program Files \ MongoDB \ Server \ 4.4 \ bin), если это не так, затем загрузите инструменты базы данных mongodb (https://www.mongodb.com/try/download/database-инструменты )
- скопировать извлеченные (распаковать) файлы (внутри разархивированной корзины) в папку bin(C: \ Program Files \ MongoDB \ Server \ 4.4 \ bin)
- скопируйте файл json в папку bin(C: \ Program Files \ MongoDB \ Server \ 4.4 \ bin)
- Теперь откройте командную строку и измените ее каталог на bin
cd "C:\Program Files\MongoDB\Server\4.4\bin"
- Теперь скопируйте это в командную строку
mongoimport -d tymongo -c test --type json --file restaurants.json
- где d- база данных (имя базы данных tymongo), c-collection(имя тестовой коллекции)
ДЛЯ CSV-ФАЙЛА
mongoimport -d tymongo -c test --type csv --file database2.csv --headerline
В 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
Запустите команду импорта в другом терминале. (не внутри оболочки монго.)
mongoimport --db test --collection user --drop --file ~/downloads/user.json
Эта команда работает там, где коллекция не указана.
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
Решение:-
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
Для получения дополнительной ссылки
это будет работать:
$ mongoimport --db databaseName --collection имя коллекции --file filePath / jsonFile.json
2021-01-09T11:13:57.410+0530 подключен к: mongodb: // localhost / 2021-01-09T11:13:58.176+0530 1 документ (ы) успешно импортирован. 0 документов не удалось импортировать.
Выше я поделился запросом вместе с его ответом
mongoimport -d < имя_базы_данных > -c < имя_коллекции > --file <c:\users\test.json> --jsonArray
Это работает со мной, когда 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"
}
Немного поздно для вероятного ответа, может помочь новым людям. Если у вас несколько экземпляров базы данных:
mongoimport --host <host_name>:<host_port> --db <database_name> --collection <collection_name> --file <path_to_dump_file> -u <my_user> -p <my_pass>
Если требуются учетные данные, в противном случае удалите этот параметр.
- Просто скопируйте путь к файлу json, например, "C:\people.json"
- перейдите в C:\Program Files\MongoDB\Server\4.2\bin
- откройте cmd в этой папке bin mongodb и запустите эту команду
mongoimport --jsonArray --db dbname- collection collectionName- filePath
пример mongoimport --jsonArray --db learnmongo --collection people --file C:\persons.json
Я попробовал что-то вроде этого, и это на самом деле работает:
mongoimport --db dbName --file D:\KKK\NNN\100YWeatherSmall.data.json
Было дано количество ответов, хотя я хотел бы дать свою команду. Раньше часто. Это может кому-то помочь.
mongoimport original.json -d databaseName -c yourcollectionName --jsonArray --drop
- импортируйте данные массива json в ATLAS на свой локальный ноутбук https://www.mongodb.com/docs/atlas/import/mongoimport/
mongoimport --uri "mongodb+srv://<user>:<password>@cluster0.elddaddy.mongodb.net/test?retryWrites=true&w=majority&ssl=true" --collection Providers --drop --file /Users/Documents/data2.json --jsonArray
Эта команда импортирует данные из файла data2.json в коллекцию с именем «Поставщики» в базе данных MongoDB, расположенную по URI кластера0.dl79aky.mongodb.net.
Опция --drop используется для удаления существующей коллекции, если она существует.
Опция --jsonArray указывает, что входной файл представляет собой массив JSON, а не один объект JSON. Это позволяет нам импортировать массив документов в пакетном режиме.
Параметр --uri указывает URI для подключения к базе данных, который включает учетные данные пользователя, имя базы данных и параметры подключения.
Вот разбивка URI:
mongodb+srv://: указывает, что это строка подключения для кластера MongoDB Atlas, использующего DNS-запись SRV. :@: указывает имя пользователя и пароль пользователя, подключающегося к базе данных. имя кластера MongoDB Atlas, к которому вы хотите подключиться
/test: имя базы данных в кластере, к которой вы хотите подключиться.
?retryWrites=true&w=majority: указывает параметры записи для соединения. retryWrites=true указывает, что драйвер должен повторить попытку записи в случае неудачи, а w=majority указывает, что операция записи должна ждать, пока большинство узлов подтвердит запись, прежде чем вернуться.
&ssl=true: указывает, что соединение должно использовать шифрование SSL/TLS.
- проверьте, что ваши данные должны быть массивом json
[
{
"name": "John",
"age": 30,
"email": "john@example.com"
},
{
"name": "Jane",
"age": 25,
"email": "jane@example.com"
},
{
"name": "Bob",
"age": 40,
"email": "bob@example.com"
}
]
Время от времени у меня возникали странные ошибки JSON. Лучший способ справиться с ними - запустить хороший валидатор JSON, чтобы убедиться в отсутствии проблем с синтаксисом. Я обычно использую https://jsonlint.com/.
Я также предпочитаю использовать специализированный инструмент администратора MongoDB, такой как Navicat для MongoDB. Хотя это не бесплатный продукт, он стоит каждого пенни. Он имеет отличный Мастер импорта, который поддерживает передачи.txt, .csv, .json, .excel и даже DB в DB. Есть экраны для установки разделителей, форматов даты, кодировки символов, сопоставления полей, вы называете это. Вы также можете оставить сообщение об ошибке или отменить.
Я использовал его для импорта огромных наборов данных и нашел, что это относительно простой процесс.
Во всяком случае, я уверен, что эти идеи добьются цели!
С наилучшими пожеланиями.
Если вы попытаетесь экспортировать эту тестовую коллекцию:
> 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 и здесь.
Это должно работать внутри mongoshell
mongoimport -d databaseName -c collectionName --drop fileName.json
если вы не запустили оболочку в нужном каталоге, вы должны указать файл вместе с его путем.