インポートされたデータで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"}
問題は、すべてのドキュメントが単一のオブジェクトのようにインポートされることです。質問は次のとおりです。
目的の結果を得るには、オブジェクトをインポートする必要がありますか?
ドキュメント 以下に注意してください:
このユーティリティは、1行に1つのJSON/CSV/TSV文字列を含む単一のファイルを取得して挿入します。
使用している構造では、Gistのエラーが修正されていると仮定して、本質的にshops
フィールドのみを持つ1つのドキュメントをインポートしています。
データを個別のショップドキュメントに分割した後、次のようなものを使用してインポートします(ショップはコレクション名であり、example
を使用するよりも意味があります)。
mongoimport -d test -c shops data.json
そして、次のようにクエリできます:
db.shops.find({"name":x,"categories.type":"shirts"})
パラメーター--jsonArray
があります:
単一のJSON配列内で複数のMongoDBドキュメントで表現されたデータのインポートを受け入れます
このオプションを使用すると、配列にフィードできるので、外側のオブジェクト構文、つまり"shops" :
までの最初のすべてと、最後の}
のみを削除する必要があります。
私自身は、コマンドラインから配列を抽出できる jq という小さなツールを使用しています。
./jq '.shops' shops.json
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
詳細情報
コマンドmongoimport
を使用すると、特定のデータベースとコレクションに人間が読めるJSON
をインポートできます。特定のデータベースとコレクションのJSON
データをインポートするには、mongoimport -d databaseName -c collectionName jsonFileName.json