2014-02-02 1 views
0

У меня есть документ, как это:MongoDB geoNear для массивов мест

{positions: [ [0.1, 0.1], [0.2, 0.2] ]} 

Я хочу запросить документы вблизи точки [0.11, 0.11]. Что-то вроде этого:

{positions: {$near: [0.11, 0.11]} } 

Как добавить индекс 2d и как запросить? Благодарю.

+0

Руководство MongoDB включает в себя [геопространственных учебники] (http://docs.mongodb.org/manual/administration/indexes-geo/) для разных типов индексов. Для индекса «2d» обратите внимание, что порядок координат всегда должен быть «[долгота, широта]». Учитывая, что ваши значения не выглядят как long/lat, если вы используете другую систему координат, вы можете [отрегулировать диапазоны координат] (http://docs.mongodb.org/manual/tutorial/build-a-2d -index/# define-location-range-for-a-2d-index), поскольку диапазон по умолчанию составляет от -180 до 180 (т. е. long/lat). – Stennie

ответ

2

Хотя данные вашего примера не самые лучшие, создание и запрос индекса довольно просты. Для создания 2d индекса вам нужна только следующая команда:

db.collection.ensureIndex({ positions: "2d" }) 

Вашего формата данные массивов в массиве вполне справедливо. Запросы просты, а как вы в основном имеют следующий синтаксис:

db.collection.find({ positions: {$near: [-75, 111]} }) 

Единственное, чтобы быть в курсе, что без выполнения каких-либо проекции вы получаете весь документ обратно в том числе целого ряда позиций, и что этот результат будет повторяться для любой из совпадающих позиций в массиве.

Будучи новичком в этом, вы лучше всего прочитаете геопространственные возможности MongoDB и внесите некоторые решения о том, какое решение будет наилучшим образом подходит для вашего случая. Следующие ссылки делают хорошую отправную точку:

http://docs.mongodb.org/manual/core/geospatial-indexes/#store-location-data

http://docs.mongodb.org/manual/administration/indexes-geo/

+0

Спасибо за ссылки. Это именно то, что я хочу :) –