MongoDB $ nearSphere становится медленнее, если используется $ maxDistance - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть MongoDB, содержащая большое количество координат, которые я использую для запроса ближайшей позиции к предоставленной, например, если БД содержит координаты (2,2) и (3,3) и запрашивается для ближайшей позиции к (1,1), она вернет (2,2).

Используя драйвер java, я могу выполнить запрос следующим образом:

MongoConnection.getInstance().getCollection(DB, COLLECTION).find(new BasicDBObject(LOCATION, new BasicDBObject("$nearSphere", Arrays.asList(longitude, latitude)))).limit(1)

, который работает нормально и возвращает результат довольно быстро (мгновенно). Однако, если ближайшая позиция находится очень далеко, эта процедура все равно возвращает ее, и тем временем я решил получить такой результат, только если он находится в радиусе R. Поэтому я решил использовать $ maxDistance:

BasicDBObject center = new BasicDBObject("$nearSphere", Arrays.asList(latitude, longitude));
center.put("$maxDistance", MAXDIST);
MongoConnection.getInstance().getCollection(DB, COLLECTION).find(new BasicDBObject(LOCATION, center)).limit(1)

Возвращает ожидаемый результат, однако это занимает около 5 секунд .

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

Спасибо за внимание

...