Пространственный запрос MongoDB к источнику и получателю

У меня есть коллекция, имя Events:

Каждый документ в коллекции Events имеет источник и место назначения в формате lat-long.

Я хотел бы сделать запрос к коллекции Events и получить только те события, которые находятся на некотором расстоянии от источника и на некотором расстоянии от пункта назначения.

Я читал, что MongoDB не поддерживает два геопространственных индекса в одной коллекции.

Я не понимаю, как должна выглядеть моя модель данных, и как я могу сделать запрос для достижения своей цели?

Спасибо


person Anup    schedule 16.08.2013    source источник


Ответы (2)


Вам придется работать с ограничением географического индекса, поэтому у вас есть несколько вариантов. Первый заключается в создании двух коллекций и выполнении двух запросов, а также разрешении пересечения на уровне приложения. Это может быть дорого в зависимости от того, что вы делаете.

Другой сценарий — работать с одной коллекцией, но изменить запрос, чтобы он проверял $geo внутри некоторой геометрии, которая представляет собой область пересечения областей вокруг вашего источника и пункта назначения. Поскольку вы запрашиваете события, которые находятся на некотором расстоянии от вашего источника и пункта назначения, это означает, что существует область пересечения. Вам решать, как рассчитать геометрию пересечения. Если возможно, вы можете предварительно рассчитать и сохранить эти пересечения.

person Dylan Tong    schedule 17.08.2013

На данный момент у вас может быть только 1 геопространственный индекс для каждой коллекции. Хотя MongoDB может позволять создавать несколько индексов, такое поведение не поддерживается. Поскольку MongoDB может использовать только один индекс для поддержки одного запроса, в большинстве случаев наличие нескольких географических индексов приведет к нежелательному поведению.

В JIRA есть несколько билетов, за которые вы можете проголосовать:

https://jira.mongodb.org/browse/SERVER-2331

https://jira.mongodb.org/browse/SERVER-3653

person Jetson John    schedule 17.08.2013