2012-06-12 2 views
38

Я пытаюсь использовать монго с некоторыми импортированными данными, но я не могу правильно использовать его с описанием моего документа.Правильный способ импорта json-файла в mongo

Это пример .json я импортировать с помощью mongoimport: https://gist.github.com/2917854

mongoimport -d test -c example data.json 

Я заметил, что все мои документ он импортируется в уникальный объект, несмотря на создание одного объекта для каждого магазина.

Именно поэтому, когда я пытаюсь найти магазин или что-либо, что я хочу запросить, возвращается весь документ.

db.example.find({"shops.name":"x"}) 

Я хочу, чтобы иметь возможность запрашивать БД для получения продуктов по идентификатору, используя точечную нотацию что-то похожее на:

db.example.find({"shops.name":"x","categories.type":"shirts","clothes.id":"1"} 

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

+1

ваша ссылка имеет дополнительный 'а' в конце –

+0

@ ErenGüven Oops! Спасибо за предупреждение! ;) – Nahikariii

ответ

36

Docs обратите внимание, что:

Эта утилита занимает один файл, содержащий 1 JSON/CSV/TSV строки на строку и вставляет его.

В структуре, которую вы используете -обновление ошибок на основе, фиксировано, вы по сути импортируете один документ только с полем shops.

После разрыва данных в отдельные магазинах документации, импорт, используя что-то вроде (магазины быть именем коллекции, имеет больше смысла, чем при использовании example):

mongoimport -d test -c shops data.json 

, а затем вы можете запросить как:

db.shops.find({"name":x,"categories.type":"shirts"}) 
23

Существует параметр --jsonArray:

Accept импорта данных, выраженных с многократным документом MongoDB в одном формате JSON обр ay

С помощью этой опции вы можете подавать массив, поэтому вам нужно всего лишь отделить внешний синтаксис объекта, т. е. все в начале до и включая "shops" :, и } в конце.

Myself Я использую маленький инструмент под названием jq, который может извлечь массив из командной строки:

./jq '.shops' shops.json 
0

Импортирования JSON

Команды mongoimport позволяет импортировать удобочитаемый JSON в конкретной базе данных & Коллекция.Чтобы импортировать JSON данные в определенной базе данных & сборник, тип mongoimport -d databaseName -c collectionName jsonFileName.json

8

ИМПОРТ ИЗ 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/

Смежные вопросы