mongodb блок мангуста maxDistance - PullRequest
       17

mongodb блок мангуста maxDistance

8 голосов
/ 30 сентября 2011

В своем приложении я пытаюсь использовать, RentModel.find ({prop_location: {$ near: [msg.lat, msg.lng], $ maxDistance: 500}}, функция (err, docs) {} У меня есть только одно значение в базе данных с широтой, долготой сан франциско. Теперь,

    1. Когда нет maxDistance => Он определяет местоположение идеально из любой точки
    2. Когда я добавляю maxDistance как 5 и ищу точно так же местоположение (с той же широтой, долготой), он не находит место нахождения.
    3. Если это 50, то же, что и пункт 2.
    4. Если это 500, я даже могу найти местоположение из Лондона.

Что не так?

что такое единица измерения расстояния? Я хочу выяснить все на расстоянии 5 км. решит ли db.executeCommand мою проблему? Нужно проверить.

Заранее спасибо.

Ответы [ 2 ]

10 голосов
/ 02 октября 2011

Наконец-то я нашел ответ на свою проблему. Теоретически долгота - это ось x, а широта - это ось y. Но мы привыкли к широте-долготе, а не долготе-широте ... Таким образом, то, как я искал, было неверным

$near : [msg.lat, msg.lng]

Когда я изменил это значение на $ вблизи: [msg.lng, msg.lat] , оно начало работать даже с 5 км ... Так что заказ был проблемой.

7 голосов
/ 30 сентября 2011

Вам нужно разделить значение максимального расстояния на 111,12 (один градус равен приблизительно 111,12 километра), чтобы преобразовать радиус градуса в расстояние в километрах.

, чтобы вы могли попробовать это

 RentModel.find({prop_location : { $near : [msg.lat, msg.lng], $maxDistance : 500/111.2}})

НоТо же самое работает и для сферных запросов: там нужно делить радиус градуса на радиус Земли 6371, чтобы работать со значениями в км

...