У меня есть 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 секунд .
Я понимаю, что могу обойти эту проблему, просто используя первый метод, и выполнить простой логический тест на возвращаемое значение, однако Я хотел бы понять, почему последняя процедура намного медленнее, чем прежняя . Я что-то делаю не так?
Спасибо за внимание