Ответ 1
Загрузите jq (это sed-подобная программа, но для JSON)
Затем запустите:
jq --compact-output ".features" input.geojson > output.geojson
затем
mongoimport --db dbname -c collectionname --file "output.geojson" --jsonArray
Поскольку Geojson является фактическим json, я думал, что могу использовать mongoimport для загрузки данных в мою базу данных MongoDB из файла .geojson.
но я получаю следующую ошибку:
exception:BSON representation of supplied JSON is too large: code FailedToParse: FailedToParse: Expecting '{': offset:0
Файл равен 25 МБ, и это его фрагмент:
{
"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
]
}
}
]
}
Загрузите jq (это sed-подобная программа, но для JSON)
Затем запустите:
jq --compact-output ".features" input.geojson > output.geojson
затем
mongoimport --db dbname -c collectionname --file "output.geojson" --jsonArray
Сейчас у вас есть множество функций. MongoDB рассмотрит это как один документ. Попробуйте удалить следующее из начала вашего geojson:
{
"type": "FeatureCollection",
"features": [
Кроме того, удалите следующее из конца вашего geojson:
]
}
EDIT. Кроме того, mongo ожидает один документ в строке. Поэтому убедитесь, что ваш единственный \n находится между документами! например.
...
},\n
{
"type": "Feature",
"id": "node/2664472516",
...
Прежде всего, для проверки правильности вашего файла GeoJSON вы можете использовать Geojsonlint, QGIS и т.д.
Чтобы импортировать данные в свою коллекцию, используйте Mongoimport:
mongoimport --db MY_DATABASE_NAME -c MY_COLLECTION_NAME --type json --file "MY_GEOJSON_FILENAME"
Замените 3 переменных выше, чем ваши действительные имена. Очевидно, убедитесь, что ваш текущий каталог содержит файл.
Этот Python script предназначен для импорта файлов GeoJSON в MongoDB за один шаг: https://github.com/rtbigdata/geojson-mongo-import.py
Идея ParoX отлично работает, но имеет ограничение на 16 МБ.
- jsonArray Принимает импорт данных, выраженных несколькими документами MongoDB в пределах одного массива JSON. Ограничен импорт 16 МБ или меньше.
Если размер файла больше 16 МБ, вы можете сделать это
jq --compact-output ".features []" input.geojson > output.geojson
Это даст вам ровно одну строку для одного объекта, без запятой.
{.....}
{.......}
{...}
{"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
Если проблема заключается в том, что ваш размер документов превосходит 16 МБ, вы можете использовать опцию batchSize
, которая устанавливает количество документов в пакете. Например:
mongoimport -d mydb -c mycol data.json -j 4 --batchSize=100
Обратите внимание на параметр -j
, который помогает увеличить вывод в базу данных с помощью нескольких рабочих.
Параметр batchSize
странно не документирован с использованием опции "-help" для "mongoimport", go figure!