2014-02-26 6 views
13

Da Geojson eigentlich json ist, dachte ich, ich könnte mongoimport verwenden, um Daten aus einer .geojson-Datei in meine MongoDB-Datenbank zu laden.So importieren Sie eine Geojson-Datei in MongoDB

aber ich erhalte den folgenden Fehler:

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

Die Datei ist 25 MB und das ist ein Fragment davon:

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

Need mor Informationen: Wie groß ist die Datei? Wie groß ist jeder Datensatz in der Datei? Können Sie den Befehl, den Sie ausgeführt haben, zerlegen, um diesen Fehler zu bekommen? Mongoimport erwartet ein JSON-Objekt pro Zeile, wenn ich mich richtig erinnere. –

+0

@RobMoore die Größe der Datei beträgt 25 MB. Ich lief 'mongoimport --db driversec --collection geomaps --file map.geojson'. Die Datei hat kein json-Objekt pro Zeile, ich würde sagen, es ist ziemlich gedruckt, das könnte dann das Problem sein ... Empfiehlst du irgendein Werkzeug, um die Datei für mongoimport richtig zu gestalten? – OscarVGG

+0

@RobMoore Ich habe die Frage bearbeitet, um a anzuzeigen Fragment der Datei, die ich versuche zu importieren – OscarVGG

Antwort

8

Gerade jetzt haben Sie eine Reihe von Funktionen. MongoDB wird dies als ein Dokument betrachten. Versuchen Sie löschen die folgenden von Anfang an Ihrer GeoJSON:

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

Auch löschen Sie die folgenden Optionen aus dem Ende Ihres GeoJSON:

] 
} 

EDIT - Auch Mongo ein Dokument pro Zeile erwartet. So stellen Sie sicher, dass Ihr \ n nur zwischen Dokumenten ist! z.B.

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

herunterladen jq (es ist sed-ähnliches Programm, aber für JSON)

Dann laufen:

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

dann

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

+0

Es ist viel besser, einen Prozess zu haben, der automatisiert werden kann, als dass man die spezifischen Anpassungen erklärt, die man in einem Texteditor machen muss (der unter dem massiven Gewicht der Datei knarrt). Danke für deinen Rat – Forbesmyester

1

Vor allem für das bestätigen Ihre GeoJSON-Datei ist korrekt, Sie könnten Geojsonlint, QGIS und so weiter verwenden.

Nach als, Ihre Daten in Ihrer Sammlung zu importieren, verwenden Sie Mongoimport:

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

Ersetzen Sie die drei Variablen über whith gültigen Namen. Stellen Sie sicher, dass Ihr aktuelles Verzeichnis die Datei enthält.

0

ParoX Idee funktioniert gut, hat jedoch 16MB Grenze.

mongodb document

--jsonArray Accepts the import of data expressed with multiple MongoDB documents within a single JSON array. Limited to imports of 16 MB or smaller.

Wenn die Dateigröße größer als 16 MB, können Sie dies tun

jq --compact-Ausgang "entsprechenden Features []" input.geojson> output.geojson

Dies gibt Ihnen genau eine Zeile für ein Objekt, kein Komma am Ende.

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

{"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 Sammlungsname --file "output.geojson" --jsonArray

0

Wenn das Problem Ihr Satz von Dokumenten Größe ist zu 16Mb überlegen ist, können Sie die Option batchSize , die die Anzahl der Dokumente in einem Stapel festlegen.Zum Beispiel:

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

Notiere die -j Option, die die Ausgabe in der Datenbank durch die Verwendung mehrerer Arbeitnehmer zu erhöhen hilft.

Die Option batchSize ist seltsamerweise nicht mit der Option '--help' von 'mongoimport' dokumentiert, go figure!