0

Geonames からの情報を含む Access 2010 データベースがあります。テーブル名は都市です。簡単にするために、列は「name」、「latitude」、「longitude」、「loc」です。MongoDB の地理空間インデックスを使用できるように、「経度」と「緯度」を 1 つのフィールドに結合する「loc」を作成しました。2 つの 10 進数値を間にコンマで結合しているため、「loc」列を文字列形式で保存する必要がありました。

このテーブルを CSV にエクスポートするときは、「経度」と「緯度」をスキップします。これは、新しく結合された「loc」フィールドがあるためです。

CSV は次のようになります。

"geonameid", "name", "loc"
1, "Sweden", "18.068287,59.336341"

「都市」コレクションに MongoImport を実行すると、loc フィールドは次のような引用符で囲まれます。

{ "_id" : ObjectId("50a9ed157db1bcfe22cddd0a"), "geonameid" : 20, "name" : "Sweden", "loc" : "18.068287,59.336341", }

ここから、「loc」を配列に変換するコマンドを実行します。Stackoverflow の別の寄稿者のおかげで、次のコマンドを使用します。

db.cities.find( { 'loc' : {$type : 2 } } ).forEach( function (x) { x.loc = new Array(x.loc); db.cities.save(x); });

結果は次のとおりです。

{ "_id" : ObjectId("50a9ed157db1bcfe22cddd0a"), "geonameid" : 20, "name" : "Sweden", "loc" : [ "18.068287,59.336341" ], }

「loc」フィールドの GPS 座標から引用符を削除するにはどうすればよいですか? 私は Java でコーディングすることはできませんし、MongoDB がこのタスクを実行するのを待つことも気にしません。「経度」フィールドと「緯度」フィールドを含む CSV をエクスポートし、それらを MongoDB の新しい「loc」フィールドに結合することができれば、それが美しいソリューションでなくても気にしません。地理空間インデックスで動作する「loc」フィールドを取得する必要があるだけです。

4

2 に答える 2

1

locを使用可能な地理空間配列に変換するコマンドは次のとおりです。

db.cities.find( { 'loc' : {$type : 2 } } ).forEach( function (x) { x.loc = x.loc.split(",").map(parseFloat); db.cities.save(x); });
于 2012-12-29T13:49:00.067 に答える
0

数値を「loc」フィールドに結合したため、これは文字列であり、引用されています。MongoDB にインポートする前に、数字に戻してください。

ただし、「loc」フィールドを GEOindex で使用するには配列にする必要があります。CSV では配列を使用できません。MS Access から JSON にデータをエクスポートし、" mongoimport --jsonArray" コマンドで JSON を MongoDB にインポートする方法を見つける必要があります。

JSON へのアクセスのエクスポート - http://www.divconq.com/2010/export-a-microsoft-access-database-to-json/

于 2012-11-19T08:56:03.953 に答える