Правильный способ импорта json файла в mongo
Я пытаюсь использовать mongo с некоторыми импортированными данными, но я не могу правильно использовать его с описанием моего документа.
Это пример импорта .json я с использованием mongoimport: https://gist.github.com/2917854
mongoimport -d test -c example data.json
Я заметил, что весь мой документ импортирован в уникальный объект, несмотря на создание одного из объектов для каждого магазина.
Вот почему, когда я пытаюсь найти магазин или что-либо, что я хочу запросить, возвращается весь документ.
db.example.find({"shops.name":"x"})
Я хочу иметь возможность запросить db для получения продуктов по id с использованием точечной нотации, аналогичной:
db.example.find({"shops.name":"x","categories.type":"shirts","clothes.id":"1"}
Проблема заключается в том, что весь документ импортируется как отдельный объект. Вопрос в том, как:
мне нужно импортировать объект, чтобы получить желаемый результат?
Ответы
Ответ 1
Docs обратите внимание, что:
Эта утилита принимает один файл, который содержит 1 строку JSON/CSV/TSV для каждой строки и вставляет ее.
В структуре, которую вы используете -обновление ошибок в основе, фиксированы, вы по существу импортируете один документ только с полем shops
.
После разбиения данных на отдельные документы магазина импорт с использованием чего-то вроде (магазины, являющиеся именем коллекции, имеют больше смысла, чем использование example
):
mongoimport -d test -c shops data.json
а затем вы можете запросить как:
db.shops.find({"name":x,"categories.type":"shirts"})
Ответ 2
Существует параметр --jsonArray
:
Принять импорт данных, выраженных несколькими документами MongoDB в пределах одного массива JSON
Используя эту опцию, вы можете подавать ее в массив, поэтому вам нужно всего лишь удалить синтаксис внешнего объекта, т.е. все в начале до и включая "shops" :
, а }
в конце.
Сам я использую небольшой инструмент под названием jq, который может извлечь массив из командной строки:
./jq '.shops' shops.json
Ответ 3
ИМПОРТ ИЗ JSON
mongoimport --db "databaseName" --collection "collectionName" --type json --file "fileName.json" --jsonArray
Формат JSON должен быть в этом формате. (Массив объектов)
[
{ name: "Name1", msg: "This is msg 1" },
{ name: "Name2", msg: "This is msg 2" },
{ name: "Name3", msg: "This is msg 3" }
]
ИМПОРТ ИЗ CSV
mongoimport --db "databaseName" --collection "collectionName" --type csv --file "fileName.csv" --headerline
Подробнее
https://docs.mongodb.com/getting-started/shell/import-data/
Ответ 4
Импорт JSON
Команда mongoimport
позволяет нам импортировать читаемые человеком JSON
в определенную базу данных и коллекцию. Чтобы импортировать данные JSON
в конкретную базу данных и коллекцию, введите mongoimport -d databaseName -c collectionName jsonFileName.json