Импорт json из файла в mongodb с помощью mongoimport
у меня есть json_file.json вот так:
[
{
"project": "project_1",
"coord1": 2,
"coord2": 10,
"status": "yes",
"priority": 7
},
{
"project": "project_2",
"coord1": 2,
"coord2": 10,
"status": "yes",
"priority": 7
},
{
"project": "project_3",
"coord1": 2,
"coord2": 10,
"status": "yes",
"priority": 7
}
]
когда я запускаю следующую команду, чтобы импортировать это в mongodb:
mongoimport --db my_db --collection my_collection --file json_file.json
Я получаю следующее сообщение об ошибке:
Failed: error unmarshaling bytes on document #0: JSON decoder out of sync - data changing underfoot?
если я добавлю флаг --jsonArray в команду, которую я импортирую следующим образом:
imported 3 documents
вместо одного документа с форматом json, как показано в исходном файле.
как я могу импортировать json в mongodb с оригинальным форматом в файле, показанном выше?
3 ответа:
возможно, следующая ссылка из блога проекта MongoDB может помочь вам получить представление о том, как работают массивы в Mongo:
http://blog.mongolab.com/2013/04/thinking-about-arrays-in-mongodb/
Я бы сделал ваш импорт иначе, и либо:
a) импортируйте три разных объекта отдельно в коллекцию, как вы говорите, используя флаг --jsonArray; или
b) инкапсулировать весь массив в пределах одного объекта, например, таким образом:
{ "mydata": [ { "project": "project_1", ... "priority": 7 } ] }
HTH.
The
mongoimport
инструмент имеет опцию:--jsonArray
обработайте источник входного сигнала как массив JSON
Или можно импортировать из файла
содержит тот же формат данных, что и
результат .
Вот пример из university.mongodb.com courseware
некоторое содержание отgrades.json
:{ "_id" : { "$oid" : "50906d7fa3c412bb040eb577" }, "student_id" : 0, "type" : "exam", "score" : 54.6535436362647 } { "_id" : { "$oid" : "50906d7fa3c412bb040eb578" }, "student_id" : 0, "type" : "quiz", "score" : 31.95004496742112 } { "_id" : { "$oid" : "50906d7fa3c412bb040eb579" }, "student_id" : 0, "type" : "homework", "score" : 14.8504576811645 }
Как видите,
массив не используется и
отсутствие разделителей-запятых между документами любой.я обнаружил, недавно,
что это соответствуетthe JSON Lines text
.
Как один используется вapache.spark.sql.DataFrameReader.json()
метод .
я столкнулся с противоположной проблемой сегодня, мой вывод будет:
Если вы хотите вставить массив объектов JSON сразу, где каждая запись массива должна рассматриваться как отдельная запись dtabase, у вас есть два варианта синтаксиса:
массив объектов с допустимыми позициями комы & -- jsonarray флаг обязателен
[ {obj1}, {obj2}, {obj3} ]
использовать файл с в основном неправильным форматированием JSON (т. е. отсутствует
,
между экземплярами объектов JSON & без флага --jsonArray{obj1} {obj2} {obj3}
Если вы хотите вставить только массив (т. е. массив как гражданин верхнего уровня вашей базы данных), я думаю, что это невозможно и недопустимо, потому что mongoDB по определению поддерживает документы как объекты верхнего уровня, которые впоследствии сопоставляются с объектами JSON. Другими словами, вы должны обернуть свой массив в объект JSON, как указал Алан Уорд.