web-dev-qa-db-ja.com

jsonファイルをmongoにインポートする適切な方法

インポートされたデータでmongoを使用しようとしましたが、ドキュメントの説明では適切に使用できません。

これは、mongoimportを使用してインポートする.jsonの例です。 https://Gist.github.com/2917854

mongoimport -d test -c example data.json

ショップごとにオブジェクトを1つ作成しているにもかかわらず、すべてのドキュメントが一意のオブジェクトにインポートされていることに気付きました。

そのため、お店やクエリしたいものを見つけようとすると、すべてのドキュメントが返されます。

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

次のようなドット表記を使用して、idで製品を取得するためにdbを照会できるようにしたいです。

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

問題は、すべてのドキュメントが単一のオブジェクトのようにインポートされることです。質問は次のとおりです。
目的の結果を得るには、オブジェクトをインポートする必要がありますか?

40
Nahikariii

ドキュメント 以下に注意してください:

このユーティリティは、1行に1つのJSON/CSV/TSV文字列を含む単一のファイルを取得して挿入します。

使用している構造では、Gistのエラーが修正されていると仮定して、本質的にshopsフィールドのみを持つ1つのドキュメントをインポートしています。

データを個別のショップドキュメントに分割した後、次のようなものを使用してインポートします(ショップはコレクション名であり、exampleを使用するよりも意味があります)。

mongoimport -d test -c shops data.json

そして、次のようにクエリできます:

db.shops.find({"name":x,"categories.type":"shirts"})
37
Eren Güven

パラメーター--jsonArrayがあります:

単一のJSON配列内で複数のMongoDBドキュメントで表現されたデータのインポートを受け入れます

このオプションを使用すると、配列にフィードできるので、外側のオブジェクト構文、つまり"shops" :までの最初のすべてと、最後の}のみを削除する必要があります。

私自身は、コマンドラインから配列を抽出できる jq という小さなツールを使用しています。

./jq '.shops' shops.json
23
The Nail

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/

9
Mahesh K

JSONのインポート

コマンドmongoimportを使用すると、特定のデータベースとコレクションに人間が読めるJSONをインポートできます。特定のデータベースとコレクションのJSONデータをインポートするには、mongoimport -d databaseName -c collectionName jsonFileName.json

1
student