Подтвердить что ты не робот

Не удается извлечь гео-ключи, даже если GeoJSON действителен

У меня есть коллекция в MongoDB с индексом 2dsphere. Объект, который я хочу сохранить, выглядит следующим образом:

{
        "type" : "Polygon",
        "coordinates" : [ 
            [ 
                [ 
                    5.052617929724351, 
                    52.64653192570052
                ], 
                [ 
                    5.051738165167465, 
                    52.64765805672784
                ], 
                [ 
                    5.054162882116928, 
                    52.64831549553909
                ], 
                [ 
                    5.054592035559312, 
                    52.64780777138566
                ], 
                [ 
                    5.055364511755601, 
                    52.64790541110375
                ], 
                [ 
                    5.056094072607651, 
                    52.64688343792051
                ], 
                [ 
                    5.054237983969346, 
                    52.64661654927096
                ], 
                [ 
                    5.052617929724351, 
                    52.64653192570052
                ]
            ]
        ]
    }

В соответствии с http://geojsonlint.com/ это совершенно верно GeoJSON. Однако MongoDB говорит, что он не может извлечь гео-ключи, потому что GeoJSON может быть искажен.

Может кто-нибудь помочь мне и обнаружить ошибку?

Это ошибка MongoDB, которую я получаю:

insertDocument :: caused by :: 16755 Can't extract geo keys from object, malformed geometry?
4b9b3361

Ответ 1

Проблема заключается в том, что вы не указываете имя объекта верхнего уровня, которому должен был быть назначен GeoJSON.

Вы должны создать индекс "2dsphere" в поле "координат". Вместо этого вы хотите создать его на поле, которому будет присвоено все это значение GeoJSON.

db.geo.createIndex({"location":"2dsphere"})
db.geo.insert({"location" : {
     "type" : "Polygon",
     "coordinates" : [
        [ <list of your-coord-pairs> ]
     ]
 }})
WriteResult({ "nInserted" : 1 })