2

名前、緯度、経度の 3 つのフィールドを持つ CSV があります。の行は次のようになります。

Place 1,73.992964,40.739037

緯度と経度をlocフィールドにmongoimportする正しい方法は何ですか? 場所のインデックス付きフィールドは経度、緯度である必要があり、緯度と経度の2つの個別のフィールドではなく単一の配列である必要があることを理解していますが、mongoimportを介して個別の値から配列への移動を処理する方法がある場合、私は行方不明です

代わりに、経度と緯度を含む単一の列 loc を持つ CSV に最初に変換する必要がありますか?

Place1,[-73.992964,40.739037]

緯度と経度が独立した列に保存されている CSV を頻繁に扱うことになるので、mongoimport でこれを行う方法を見つけたいと思っています。

4

2 に答える 2

2

Mongoimport の機能は非常に限られています。このような状況では、csv ファイルを 1 行ずつ解析し、希望どおりにドキュメントを作成するカスタム スクリプトを作成することを公式に推奨しています。

地理空間インデックスを作成するには、地理空間インデックスのドキュメントの上部にある「いくつかの例:」セクションで説明されているように、位置情報を同じキーの下に格納する必要があります: http://www.mongodb.org/ display/DOCS/Geospatial+Indexing

.csv ファイルからデータを直接インポートすると、次のようなドキュメントが作成されます。

doc1.csv:
place, lat, lon
Place 1,73.992964,40.739037

$ ./mongoimport -d test -c a --type csv --headerline --file doc1.csv 

> db.a.find()
{ "_id" : ObjectId("4f7602d70c873ff911798fd3"), "place" : "Place 1", "lat" : 73.992964, "lon" : 40.739037 }

残念ながら、上記のドキュメントに地理空間インデックスを作成することはできません。

実験として、あなたが説明した 2 番目の形式のデータを含む .csv ファイルをインポートしようとしましたが、成功しませんでした。

doc2.csv:
place, loc
Place1,[-73.992964,40.739037]

$ ./mongoimport -d test -c b --type csv --headerline --file doc2.csv 

> db.b.find()
{ "_id" : ObjectId("4f7602e40c873ff911798fd4"), "place" : "Place1", "loc" : "[-73.992964", "field2" : "40.739037]" }

さらなる実験として、.csv ドキュメントを json 形式に変更し、それをインポートしたところ、うまくいくようでした。

doc3.json:
{name:"Place1" , loc:[-73.992964,40.739037]}

$ ./mongoimport -d test -c c --type json --file doc3.json 

> db.c.find()
{ "_id" : ObjectId("4f7604570c873ff911798fd5"), "name" : "Place1", "loc" : [ -73.992964, 40.739037 ] }

ただし、すべての .csv ファイルを .json 形式に変換するスクリプトを作成している場合は、.csv ファイルをコレクションに直接インポートするカスタム スクリプトを作成する方がよいでしょう。

于 2012-03-30T19:23:28.843 に答える