web-dev-qa-db-ja.com

GeojsonファイルをMongoDBにインポートする方法

Geojsonは実際のjsonなので、mongoimportを使用して.geojsonファイルからMongoDBデータベースにデータをロードできると思いました。

しかし、次のエラーが発生します。

exception:BSON representation of supplied JSON is too large: code FailedToParse: FailedToParse: Expecting '{': offset:0

ファイルは25MBで、これはそのフラグメントです。

{
"type": "FeatureCollection",
"features": [
{
    "type": "Feature",
    "id": "node/2661561690",
    "properties": {
        "timestamp": "2014-02-08T17:58:24Z",
        "version": "1",
        "changeset": "20451306",
        "user": "Schandlers",
        "uid": "51690",
        "natural": "tree",
        "id": "node/2661561690"
    },
    "geometry": {
        "type": "Point",
        "coordinates": [
            -66.9162255,
            10.5056439
        ]
    }
},
// ... Omitted data
{
    "type": "Feature",
    "id": "node/2664472516",
    "properties": {
        "timestamp": "2014-02-10T04:27:30Z",
        "version": "2",
        "changeset": "20477473",
        "user": "albertoq",
        "uid": "527105",
        "name": "Distribuidora Brithijos (Aceites)",
        "shop": "car_parts",
        "id": "node/2664472516"
    },
    "geometry": {
        "type": "Point",
        "coordinates": [
            -66.9388903,
            10.4833647
        ]
    }
}
]
}
21
OscarVGG

ダウンロード jq (sedのようなプログラムですが、JSON用です)

次に、以下を実行します。

jq --compact-output ".features" input.geojson > output.geojson

その後

mongoimport --db dbname -c collectionname --file "output.geojson" --jsonArray

16
ParoX

現在、さまざまな機能があります。 MongoDBは、これを1つのドキュメントと見なします。 geojsonの最初から以下を削除してみてください。

{
"type": "FeatureCollection",
"features": [

また、geojsonの末尾から以下を削除します。

]
}

編集-また、mongoは1行に1つのドキュメントを想定しています。したがって、\ nがドキュメントの間にあることを確認してください。例えば.

...    
},\n
    {
        "type": "Feature",
        "id": "node/2664472516",
...
9
Adam

ParoXのアイデアはうまく機能しますが、16MBの制限があります。

mongodbドキュメント

--jsonArray単一のJSON配列内の複数のMongoDBドキュメントで表現されたデータのインポートを受け入れます。 16MB以下の輸入に限定されます。

ファイルサイズが16MBより大きい場合は、これを行うことができます

jq --compact-output ".features []" input.geojson> output.geojson

これにより、1つのオブジェクトに対して正確に1行が表示され、最後にコンマは表示されません。

{.....}
{.......}
{...}

{"type":"Feature","geometry":{"type":"Point","coordinates":[-80.87088507656375,35.21515162500578]},"properties":{"name":"ABBOTT NEIGHBORHOOD PARK","address":"1300  SPRUCE ST"}}
{"type":"Feature","geometry":{"type":"Point","coordinates":[-80.83775386582222,35.24980190252168]},"properties":{"name":"DOUBLE OAKS CENTER","address":"1326 WOODWARD AV"}}
{"type":"Feature","geometry":{"type":"Point","coordinates":[-80.83827000459532,35.25674709224663]},"properties":{"name":"DOUBLE OAKS NEIGHBORHOOD PARK","address":"2605  DOUBLE OAKS RD"}}
{"type":"Feature","geometry":{"type":"Point","coordinates":[-80.83697759172735,35.25751734669229]},"properties":{"name":"DOUBLE OAKS POOL","address":"1200 NEWLAND RD"}}
{"type":"Feature","geometry":{"type":"Point","coordinates":[-80.81647652154736,35.40148708491418]},"properties":{"name":"DAVID B. WAYMER FLYING REGIONAL PARK","address":"15401 HOLBROOKS RD"}}
{"type":"Feature","geometry":{"type":"Point","coordinates":[-80.83556459443902,35.39917224760999]},"properties":{"name":"DAVID B. WAYMER COMMUNITY PARK","address":"302 HOLBROOKS RD"}}
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-80.72487831115721,35.26545403190955],[-80.72135925292969,35.26727607954368],[-80.71517944335938,35.26769654625573],[-80.7125186920166,35.27035945142482],[-80.70857048034668,35.268257165144064],[-80.70479393005371,35.268397319259996],[-80.70324897766113,35.26503355355979],[-80.71088790893555,35.2553619492954],[-80.71681022644043,35.2553619492954],[-80.7150936126709,35.26054831539319],[-80.71869850158691,35.26026797976481],[-80.72032928466797,35.26061839914875],[-80.72264671325684,35.26033806376283],[-80.72487831115721,35.26545403190955]]]},"properties":{"name":"Plaza Road Park"}}

mongoimport --db dbname -c collectionname --file "output.geojson" --jsonArray

2
hoogw

このPythonスクリプトは、GeoJSONファイルを1つのステップでMongoDBにインポートするように設計されています: https://github.com/rtbigdata/geojson-mongo-import.py

1
FloorDivision

まず、GeoJSONファイルが正確であることを確認するには、 Geojsonlint[〜#〜] qgis [〜#〜] などを使用できます。

その後、データをコレクションにインポートするには、 Mongoimport :を使用します。

mongoimport --db MY_DATABASE_NAME -c MY_COLLECTION_NAME --type json --file "MY_GEOJSON_FILENAME"

上記の3つの変数を有効な名前に置き換えてください。明らかに、現在のディレクトリにファイルが含まれていることを確認してください。

ドキュメントのセットが16Mbを超えることが問題である場合は、batchSizeオプションを使用して、バッチ内のドキュメントの数を設定できます。例えば:

mongoimport -d mydb -c mycol data.json -j 4 --batchSize=100

複数のワーカーを使用してデータベースへの出力を増やすのに役立つ-jオプションに注意してください。

batchSizeオプションは、奇妙なことに、「mongoimport」の「--help」オプションを使用して文書化されていません。図を参照してください。

0
Kartoch