2015-03-22 3 views
1

Я запрашивая документы по их местоположению со следующими критериями

db.collection.find({ 
    "location": { 
     "$geoWithin": { 
      "$box": [ 
       [165.8694369, -52.61941849999999], 
       [-175.831536, -29.2313419] 
      ] 
     } 
    } 
}); 

Какой тип индекса следует использовать для поля местонахождения либо 2d или 2dsphere?

ответ

1

Цитирование documentation.

Запрос вычисляет расстояния, используя плоскую (плоскую) геометрию.

Изменено в версии 2.2.3: Приложения могут использовать $ box без геопространственного индекса. Однако геопространственные индексы поддерживают гораздо более быстрые запросы, чем неиндексированные эквиваленты. До 2.2.3 перед использованием любого из операторов геопространственных запросов должен существовать геопространственный индекс в поле, где хранятся координаты.

Только 2-й геопространственный индекс поддерживает $ box.


Сферическая

Для расчета геометрии над Землей, как сферу, хранить данные о местоположении на сферической поверхности и использовать 2dsphere индекс.

Сохраните данные о местоположении как объекты GeoJSON с этим порядком координат по оси: долгота, широта. В системе координат GeoJSON используется система координат WGS84.


Flat

Для расчета расстояний на евклидовой плоскости, хранить данные о местоположении в наследство пары координат и использовать 2d индекс.

+0

Благодарим за отзыв. Но $ box - всего лишь пример, поэтому я мог бы использовать $ geometry с Poligon вместо – Erik

+0

@Erik вам может потребоваться прочитать [this] (http://docs.mongodb.org/manual/applications/geospatial-indexes/#geospatial-indexes -and-queries) – styvane

+0

Спасибо за ссылку, но я пока не понимаю, какой тип поверхности должен использовать для моего запроса плоскую или сферическую? – Erik

Смежные вопросы