Нахождение ближайшего местоположения между пользователями в mongoDB, где текущий пользователь и коллекция пользователей имеют массив расположений - PullRequest
0 голосов
/ 27 августа 2018

У меня есть приложение на основе определения местоположения, которое находит близлежащих пользователей, что достаточно просто. Это мой запрос mongoDB:

users._ensureIndex({'profile.geoLocation': "2dsphere"});
return users.find({
  'profile.geoLocation': {
    $near: {
      $geometry: {
        type: "Point",
        coordinates: [long, lat]
      },
      $maxDistance: 5000
    }
  }}}
);

Вот где это становится интересным (или, возможно, довольно сложным) ...

Что происходит, когда все пользователи имеют несколько местоположений (в моем случае домашние координаты и рабочие координаты), и я хочу найти ближайшие 2 точки из 4 возможных комбинаций совпадений местоположений. Так что мой результат может прийти из любой из этих комбинаций ...

  • домашний адрес текущего пользователя: все домашние адреса
  • рабочий адрес текущего пользователя: все рабочие адреса
  • домашний адрес текущего пользователя: все рабочие адреса
  • рабочий адрес текущего пользователя: все домашние адреса

Это пример того, как выглядит объект профиля для пользователя:

profile: {
  "name": "Joe Blogs",
  "geoLocations": [{
    "place": "home",
    "geometry": {
      "type": "Point",
      "coordinates": {
        "longitude": 28.059198400000003,
        "latitude": -26.0791897
      }
    }
  }, {
    "place": "work",
    "geometry": {
      "type": "Point",
      "coordinates": {
        "longitude": 28.0592062,
        "latitude": -26.0791921
      }
    }
  }]
}

Я знаю, что могу передать в одной геопространственной точке (для текущего пользователя), и если у каждого пользователя в коллекции есть массив, mongoDB будет сравнивать это местоположение с массивом в каждом документе об использовании. Однако, насколько я понимаю, я не могу передать массив для текущего пользователя.

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

Есть ли способ сделать это с помощью mongoDB или я собираюсь выполнить итерацию / выполнение этого вручную?

...