Хорошая новость: производительность и индексируемость запросов одинаковы в MongoDB для всех поддерживаемых типов GeoJSON.
Основным фактором, определяющим ваше решение, должно быть то, нужна ли вашей информационной архитектуре геополе и требуемое программное обеспечение.содержать больше типов, чем просто полигоны.Вы говорите, что храните точки?Если вы хотите хранить все геоданные в одном поле, например, location
(и, вероятно, с указанием индекса 2dsphere), вам понадобится GeometryCollection
, в который вы можете поместить Point
и MultiPolygon
.В спецификации GeoJSON рекомендуется https://tools.ietf.org/html/rfc7946#page-9 , а не для вложения GeometryCollection
, поэтому для тех источников данных, которые дают вам GeometryCollection
, вы должны выполнить итерацию содержимого и заполнить свой собственный GeometryCollection
, которыйтакже содержит ваши Point
s и т. д.
Если вы храните баллы отдельно, например, eventCenter
отдельно от eventAreasEffected
, тогда eventCenter
может быть просто Point
и eventAreasEffected
может быть одним «MultiPolygon»;нет необходимости в GeometryCollection
.Прекрасно иметь гео в более чем одном поле и иметь или не иметь несколько индексов 2dsphere в этих полях.Начиная с MongoDB 4.0, вы можете использовать $geoNear
в коллекции, имеющей более одного индекса 2dsphere, включив опцию key
.
Вот неофициальный, но разумный подход к определению: A MultiPolygon
не являетсяпроизвольная совокупность Polygon
, а точнее единственная «концепция формы», которая, как оказалось, имеет непересекающиеся многоугольники.Соединенные Штаты могут быть описаны в одном MultiPolygon
, который имеет Аляску, Гавайи, континентальную часть США, может быть, Пуэрто-Рико и т. Д. На самом деле, с этой целью вы заметите, что хранить данные, относящиеся ккаждый член MultiPolygon
, потому что coordinates
может быть только массивом точек.Например, информация о третьем полигоне должна переноситься в одноранговом поле в одноуровневое поле coordinates
.Но дискретный массив Polygon
или GeometryCollection
из Polygon
может хранить дополнительную информацию в форме каждая .Обратите внимание, что ни GeoJSON, ни MongoDB не ограничивают вас в добавлении полей в дополнение к type
и coordinates
для каждой фигуры.
Более тонкий вопрос - это дизайн и семантика GeometryCollection
из Polygon
против. MultiPolygon
.Чтобы еще более усложнить это, существует проблема явных дыр, определенных в Polygon
, по сравнению с коллекцией неявно «слоистых» Polygon
, которые пост-обрабатываются вне БД гео-программным обеспечением.