queries example mongodb geospatial geojson

queries - mongodb geospatial example



Cómo importar un archivo Geojson a MongoDB (6)

Como Geojson es json real, pensé que podría usar mongoimport para cargar datos en mi base de datos MongoDB desde un archivo .geojson.

pero estoy recibiendo el siguiente error:

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

El archivo es de 25MB y este es un fragmento de él:

{ "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 ] } } ] }


Descarga jq (es un programa similar a sed pero para JSON)

Entonces corre:

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

entonces

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


En este momento tienes una serie de características. MongoDB considerará esto como un documento. Intenta eliminar lo siguiente desde el principio de tu geojson:

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

Además, elimine lo siguiente del final de su geojson:

] }

EDITAR - También, mongo espera un documento por línea. ¡Así que asegúrese de que su único / n sea entre documentos! p.ej

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


En primer lugar, para verificar que su archivo GeoJSON es exacto, puede usar Geojsonlint , QGIS , etc.

Después de Mongoimport , para importar sus datos a su colección, use Mongoimport :

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

Reemplace las 3 variables arriba con sus nombres válidos. Obviamente, asegúrese de que su directorio actual contenga el archivo.



La idea de ParoX funciona muy bien, sin embargo tiene un límite de 16MB.

documento mongodb

--jsonArray Acepta la importación de datos expresados ​​con múltiples documentos MongoDB dentro de una única matriz JSON. Limitado a las importaciones de 16 MB o menos.

Si el tamaño del archivo es superior a 16 MB, puede hacerlo

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

Esto le dará exactamente una línea para un objeto, sin coma al final.

{.....} {.......} {...} {"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


Si el problema es que el tamaño de su documento es superior a 16Mb, puede usar la opción batchSize , que establece el número de documentos en un lote. Por ejemplo:

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

Tenga en cuenta la opción -j que ayuda a aumentar la salida a la base de datos utilizando varios trabajadores.

batchSize opción batchSize no está documentada usando la opción ''--help'' de ''mongoimport'', ¡imagínate!