Подтвердить что ты не робот

Правильный способ импорта 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"}

Проблема заключается в том, что весь документ импортируется как отдельный объект. Вопрос в том, как: мне нужно импортировать объект, чтобы получить желаемый результат?

4b9b3361

Ответ 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