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

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

 Eren Güven12 июн. 2012 г., 16:51
у вашей ссылки есть дополнительные "a"; в конце
 Nahikariii12 июн. 2012 г., 16:57
@ ErenG & # xFC; ven Упс! Спасибо за предупреждение! ;)

Ответы на вопрос(4)

Importing a JSON

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

Решение Вопроса

Документы Обратите внимание, что:

This utility takes a single file that contains 1 JSON/CSV/TSV string per line and inserts it.

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

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

mongoimport -d test -c shops data.json

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

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

IMPORT FROM 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" }
]

IMPORT FROM CSV

mongoimport --db "databaseName" --collection "collectionName" --type csv --file "fileName.csv" --headerline

Больше информации

https://docs.mongodb.com/getting-started/shell/import-data/

Есть параметр--jsonArray:

Accept import of data expressed with multiple MongoDB document within a single JSON array

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

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

./jq '.shops' shops.json

Ваш ответ на вопрос